2014-10-01 69 views
0

我想確保在lambda表達式是一樣的預期表達犀牛製品測試Lambda表達式

此外,我想要寫測試用例期望值

如果我寫匹配它不工作

例如

public bool IsUserActive(User user) 
{ 
    userRepository.Any(x=>x.UserId== user.UserId && x.IsActive); 
} 

單元測試案例

userRepository.Stub(x=>x.IsActive(Arg<User>.Matches(y=>y.IsActive)).Return(true); 

上述表達式不工作

我所見過的例子,但我想測試一些lambda表達式,通過檢查條件

不是用戶名字符串

stubUserRepository.Stub(x => 
    x.GetUserByName(Arg<string>.Matches(y => 
    y.StartsWith("aye", StringComparison.InvariantCulture) 
     || y.StartsWith("stein", StringComparison.InvariantCulture))) 
    .Return(theUser); 
Assert.AreSame(theUser, stubUserRepository.GetUserByName("steinegger")); 
Assert.AreSame(theUser, stubUserRepository.GetUserByName("ayende")); 
返回布爾
+7

匹配contstraint不是斷言一個拉姆達完全匹配到您希望它你的λ,你應該測試,該方法輸出您希望爲每個不同的值不同類型的輸入。測試編寫的代碼是否是您編寫的代碼並不是特別有效。 – Servy 2014-10-01 16:00:30

回答

0

使用AbstractConstraint屬性

public class UserConstraint :AbstractConstraint 

並重寫等於

_dataSericeValidator.AssertWasCalled(
       x => 
        x.ValidateRequestUser(Arg<UserDto>.Matches(new UserConstraint (_userDto))));