2009-05-17 18 views
5

Próbuję użyć Moq 3.x, działa znakomicie. Mam jednak problem, którego nie potrafię rozwiązać. BiorącArgument Moq z Action

public interface ITestSpec 
{ 
    bool Run(Action<string, string> onIncorrectResponse); 
} 

Staram następujące:

var passingTestSpec = new Mock<ITestSpec>(); 
passingTestSpec 
    .Setup(m => m.Run(null)) 
    .Returns(true); 

Action<string, string> fakeAction = 
    (expected, actual) => { throw new Exception("Should not run"); }; 

Assert.IsTrue(passingTestSpec.Object.Run(fakeAction)); 

Moim problemem jest to, że każda rozmowa na passingTestSpec.Object.Run (... pewne działania ...) zwraca false. Wygląda na to, że biblioteka Moq próbuje dopasować akcję do argumentu przekazanego do Run() w wywołaniu Setup() i nie powiedzie się. W rzeczywistości nie ma znaczenia, jaką akcję wywołaję w wywołaniu Run() ... nadal zwraca false.

Wszelkie pomysły?

[Edytuj] Właśnie coś odkryłem; jeśli zamieniłem linię instalacyjną na

.Setup(m => m.Run(fakeAction)) 

test przechodzi. Jednak nie wiem, z jaką operacją zostanie wywołana metoda .Run(), więc nie jest to rozwiązanie. Ktoś wie o odpowiedniku It.IsAny dla działań?

Odpowiedz

13

Co w tym złego:

It.IsAny<Action<string, string>>() 
+0

LOL Powinienem wiedzieć ktoś ma zamiar znaleźć rozwiązanie ... myśleć zmarnowałem kilka godzin na tym :(dzięki, pójdę z tym, że lepiej niż moje. –