2012-10-16 35 views
5

Việc áp dụng Tôi đang thử nghiệm có đầy đủ các sự kiện dựa trên các đại biểu tùy chỉnh, như thế này:Làm cách nào để tăng sự kiện trong FakeItEasy cho sự kiện dựa trên đại biểu tùy chỉnh?

public delegate void NameChangedHandler(string name); 
public event NameChanged OnNameChanged; 
... 
public void ChangeYourName(string newName) 
{ 
    if(NameChanged != null) 
     NameChanged(newName); 
} 

Tôi muốn thử ra lớp sản xuất những sự kiện và nâng cao những sự kiện này để lớp dưới kiểm tra.

Tôi biết rằng FakeItEasy có thể sử dụng Raise.With() để tăng sự kiện bằng chữ ký sự kiện truyền thống của MyHandler(object sender, EventArgs e) hoặc MyHandler(EventArgs e), nhưng tôi không biết phải làm gì trong trường hợp của mình.

Bất kỳ ý tưởng nào?

+0

Tôi đã chạy vào cùng một điều chính xác ngay hôm nay. Ai đó có thể giúp đỡ ở đây? – jdscolam

+1

Tôi tin rằng câu trả lời là FakeItEasy không thể làm điều này. Giải pháp của tôi là refactor sự kiện của tôi để có EventArgs. – pduncan

+1

Đã xảy ra sự cố cho https://github.com/FakeItEasy/FakeItEasy/issues/30 này –

Trả lời

3

Tính đến FakeItEasy 2.0.0, điều này hoàn toàn có thể.

Các Raising Events documentation topic có những câu chuyện đầy đủ, nhưng thực chất là bạn muốn sử dụng

fake.OnNameChanged += Raise.With<NameChanged>(newName); 

Như mọi khi, sự kiện này phải ảo.

0

Bạn luôn có thể tạo ChangeYourName ảo và thay thế phương thức.

A.CallsTo(()=>fakeClass.ChangeyourName(A<string>._)).Invokes((x)=>invokeMockEvent(x)); 

Nếu đó không phải là những gì bạn muốn, tôi cho rằng nếu ChangeYourName là công khai bạn chỉ có thể tạo lớp giả của bạn

var class = new Class(); 
class.OnNameChanged += (x)=> 
{ 
    Assert.AreEqual(x,"tim"); 
}; 

class.ChangeYourName("tim"); 
Các vấn đề liên quan