以下罰款對我的作品與Moq 4.0 Beta:
public class Dude
{
public int DudeId { get; set; }
public string Ride { get; set; }
}
public interface IInterfaceToBeMocked
{
IEnumerable<Dude> SearchDudeByFilter(Expression<Func<Dude,bool>> filter);
}
和單元測試:
[TestMethod]
public void TestDudes()
{
// arrange
var expectedDudes = new[]
{
new Dude(), new Dude()
};
var mock = new Mock<IInterfaceToBeMocked>();
mock.Setup(method => method.SearchDudeByFilter(
x => x.DudeId.Equals(10) && x.Ride.Equals("Harley"))
).Returns(expectedDudes);
// act
// Remark: In a real unit test this call will be made implicitly
// by the object under test that depends on the interface
var actualDudes = mock.Object.SearchDudeByFilter(
x => x.DudeId.Equals(10) && x.Ride.Equals("Harley")
);
// assert
Assert.AreEqual(actualDudes, expectedDudes);
}
現在,如果你改變的東西轉化爲實際的方法的參數調用測試將不再因爲只有參數相同,模擬方法纔會返回預期結果:
var actualDudes = mock.Object.SearchDudeByFilter(
x => x.DudeId.Equals(20) && x.Ride.Equals("Honda")
);
備註:採用lambda表達式的模擬方法是一項新功能,在先前版本中我們需要使用It.Is<SomeType>
和It.IsAny<SomeType>
參數約束。
我會假設錯過的右括號是複製到網站時的錯字,而不是回答,因爲如果您在提及時進行編譯並在調試期間出現故障,我不知道它會是什麼。 – eglasius 2010-09-09 17:48:24
@eglasius:現在怎麼樣? – Perpetualcoder 2010-09-11 09:23:17