[英]How can I test this
假设我有以下代码,我想测试Data
class 在调用Dowork()
时是否正确调用了两个项目类的Update()
方法。
`
public class Item1
{
public string Name { get; private set; }
public void Update(string value) { Name = ...; }
}
public class Item2
{
public string Name { get; private set; }
public void Update(string value) { Name = ...; }
}
public class Data
{
public Item1 Item1 { get; set; }
public Item2 Item2 { get; set; }
public void Dowork()
{
Item1.Update("Q");
Item2.Update("W");
}
}
`
如果我不能修改 Item1 和 Item2 类(外部代码)来添加可以模拟的接口,我该如何实现呢?
一种选择是在测试中调用Dowork()
之前和之后检查Item.Name
和Item2.Name
,但是我不是在测试 Item1 和 Item2 的实现吗? 即,如果 Item1 或 Item2 发生变化,那么即使我没有测试它们的行为,我的测试也会中断。
我真正关心的是 Data 在调用 DoWork 时调用 Update 方法,而不是此时 Item 类碰巧做了什么。
我想向您推荐NSubstitute
nuget package,您可以将其用于 mocking 并轻松检查方法调用。
[Fact]
public void Check_Method_Call()
{
var item1= Substitute.For<Item1>();
var item2= Substitute.For<Item2>();
var data= new Data()
{
Item1=item1,
Item2=item2
};
//call update methods
data.Dowork();
//check method calls
item1.Received(1).Update("Q");//or you can use Arg.Any<string>()
item2.Received(1).Update(Arg.Any<string>());
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.