如何解决POCO与Moq进行测试的接口
我们有一个只带有属性的类,一种测试方法,该方法不会返回任何内容,并且我们使用Moq来模拟其依赖关系。我们想测试是否设置了对象的某些属性。因此,我们尝试模拟该类,以便稍后使用Moq的VerifySet方法,该方法抱怨该属性未标记为virtual也不是接口。创建一个接口是可行的,我们可以根据需要验证该属性。我们是否应该为所有事物(包括像POCO这样的情况)创建一个接口?
下面我提供了一个最小的示例,但实际代码要大得多。
班级
data: { ad }
测试
public class Car
{
public string Id { get; set; }
public string Name { get; set; }
}
方法
var mock = Mock<ICar>();
handler.Handle(mock);
mock.VerifySet(x=> x.Name = "Furioso");
接口
public void Handle(Car car)
{
car.Name = "Furioso"
}
解决方法
我在这里进行假设,但这是我要传达的内容:
var car = new Car(); //no behavior to mock here,just a DTO. You may have to set values to this instance before passing it (or not).
handler.Handle(car); //handler is the instance of the class being tested
//Any other assertions
Assert.Equal("Furioso",car.Name); //I don't use Moq,but whatever is equivalent.
,
在我看来,您想更改assert
而不是检查setter
是否已被调用。
真正考虑一下您要在此处进行的测试,例如,假设您有一个service
可以更改某些属性。
public class MyValue {
public string Value { get; set; }
}
public class MyService {
public void ChangeValues(MyValue value,string toValue) {
value.Value = toValue;
}
}
如果服务如下所示:
public class MyService {
public void ChangeValues(MyValue value,string toValue) {
value.Value = "toValue";
}
}
在测试是否调用setter
时,两种情况都将为真。
当您断言对value.Value
所做的更改时,只有第一种情况会成功。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。