2012-10-19 27 views
6

Aşağıdaki arayüze sahiptir: Benim birim testindeFakeItEasy - Bir yöntemi engellemek ve kendi uygulamamla değiştirmek mümkün mü?

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

, çok gibi alay:

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

Ne yapmak istiyorum, Write yöntemi mesafesidir benim özel kullanır, böylece Benim testimde tanımladığım uygulama. Böyle bir şey:

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

İşte Action yöntem var, ama ne olmasını istiyorum outputDestination.Write geçirilen herhangi bir parametre benim özel eylem yönlendirilmek olduğunu gelmez

. FakeItEasy kullanarak bu mümkün mü? Eğer değilse, bu tür davranışlara izin veren başka bir alaycı çerçeve var mı?

cevap

7

Sen Invokes o davranışı elde edebilirsiniz:

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

Gerçekten göstermez yapmak oluşturduktan kez outputDestination nasıl kullandığınızı. Test altında bazı yöntemlere enjekte edermisiniz? Eğer öyleyse, o zaman, eğer bir sahte oluşturmak yerine, IOutputDestination'u uygulayan ve Write()'un gerekli uygulamasını içeren özel hazırlanmış bir sınıf yaratırsınız?

Sanırım bu, sahte olup olmadığını doğrulamak için ihtiyacınız olan diğer davranışlara bağlı olacaktır. Daha fazla bağlam olmadan bilmek zor.

İlgili konular