【发布时间】:2020-08-12 13:51:07
【问题描述】:
我们有一个只有属性的类,一个不返回任何东西的测试方法,我们正在使用 Moq 来模拟它的依赖关系。我们想测试是否设置了对象的某些属性。所以我们试图模拟这个类,所以稍后我们将使用 Moq 中的 VerifySet 方法,它抱怨该属性没有被标记为虚拟,也不是一个接口。创建一个接口是可行的,我们可以根据需要验证属性。我们是否应该为所有东西创建一个接口,包括像这样的案例,一个 POCO?
下面我包含一个最小的示例,但实际代码要大得多。
类
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"
}
界面
public interface ICar
{
public string Id { get; set; }
public string Name { get; set; }
}
【问题讨论】:
-
我个人认为你在这里测试了错误的东西。这对我来说看起来你需要重新考虑你的测试(对不起,我知道这不是一个真正的答案)
-
您正在测试的类不应该被模拟。模拟类的依赖项(如果有)。如果您这样做,无论在该类中设置什么属性,您都可以在运行您正在测试的任何方法之后在断言步骤中进行检查。你不会嘲笑 POCO。
-
@insane_developer 那么,在不模拟 Car 的情况下,如果方法返回 void,您将如何断言它已按预期修改?