情境
在寫單元測試時,想判斷輸入物件的其中一個 property 是特定數值才回傳造假資料。
可以限縮造假的範圍來提高正確性。
使用 NSubstitute Arg.Is<T> 有條件的比對參數
有個 mail 物件,在寫測試時想造假特定收件人寄送的回傳值。
1
2
3
4
5
6
| public class Mail
{
public string Recipient { get; set; }
public string Subject { get; set; }
public List<AttachFile> Attachment { get; set; }
}
|
這時可以使用 Arg.Is<T>(condition)
裡面帶入指定條件,以下範例是當收件人為 Leo 時才回傳造假的結果 true
。
1
| _mailService.Send(Arg.Is<Mail>(m => m.Recipient == "Leo")).Returns(true);
|
另外想測試是否有特定參數的呼叫 Received
一次,也可以使用 Arg.Is
去限縮條件。
此例為驗證是否有收件人是 Leo 的 mail 呼叫 Send()
方法。
1
| _mailService.Received(1).Send(Arg.Is<Mail>(m => m.Recipient == "Leo"));
|
Reference
Argument matchers - Conditionally matching an argument