2012-10-19 22 views
6

Tôi có giao diện sau:FakeItEasy - Có thể chặn một phương pháp và thay thế bằng cách thực hiện của riêng tôi không?

public interface IOuputDestination 
{ 
    void Write(String s); 
} 

Trong thử nghiệm đơn vị của tôi, tôi thử nó như vậy:

var outputDestination = A.Fake<IOutputDestination>(); 

Những gì tôi muốn làm, là đánh chặn các phương thức Write để nó sử dụng tùy chỉnh của tôi thực hiện mà tôi xác định trong thử nghiệm của mình. Một cái gì đó như thế này:

String output = ""; 
A.CallTo(() => outputDestination.Write(A<String>.Ignored)).Action(s => output += s); 
       //Is something like this even possible ? ----^ 

Đây là phương pháp Action không tồn tại, nhưng những gì tôi muốn xảy ra là bất kỳ tham số được truyền vào outputDestination.Write được chuyển hướng đến hành động tùy chỉnh của tôi. Điều này có thể sử dụng FakeItEasy không? Nếu không, có một khuôn khổ nhạo báng khác cho phép loại hành vi này không?

Trả lời

7

Bạn có thể nhận hành vi đó với Invokes:

String output = ""; 
A.CallTo(() => outputDestination.Write(A<String>.Ignored)) 
    .Invokes((string s) => output += s); 
0

Bạn không thực sự cho thấy làm thế nào bạn đang sử dụng outputDestination khi bạn đã tạo ra nó. Bạn sẽ tiêm nó vào một số phương pháp được thử nghiệm? Nếu vậy, thì Điều gì sẽ xảy ra nếu, thay vì tạo giả, bạn tạo một lớp được chế tác đặc biệt thực hiện IOutputDestination và trong đó có yêu cầu thực hiện Write() của bạn?

Tôi đoán điều này sẽ phụ thuộc vào những gì (nếu có) bahaviours khác bạn cần phải xác minh trên giả mạo của bạn. Khó mà biết mà không có ngữ cảnh nhiều hơn.