[英]Unit testing and assert case for void method
我正在尝试为void方法创建一些单元测试。 基本上,该方法旨在显示系统用户的角色并在软件中实现它。
这是方法:
public void setPersonObj(Person typeObj)
{
this.typeObj = typeObj;
createMain();
}
如何在单独的类中创建一个断言案例,该类使用单元测试来检查此方法?
非常感谢
如果该方法void
则显然存在一些副作用。 否则它将是一个无操作。 所以你别无选择,需要验证这些副作用。
如何测试这些副作用取决于您使用的技术和测试方法:
如果该方法调用其他一些协作者/对象,则模拟它们并在之后验证模拟
如果它改变了一些其他组件的状态 (将元素添加到集合,修改字段)查询并断言它们
如果它在磁盘/数据库上存储了某些东西 ,也可以查询它们
如果它在Swing中显示一些窗口,你需要使用像Window Licker这样的Swing测试框架
如果......您可以提供更多技术细节吗?
BTW执行一些额外无关逻辑的setter是代码气味。 维护这些代码的人会发现很难弄清楚这个无辜的setPersonObj()
除了......设置之外还做了什么。
所有这些名称: Person
, PersonObj
和typeObj
应该与JavaBean规范的一致性和兼容性相同。
单元测试时基本上有两种不同的理念。
测试您测试的类的状态 。 您通常运行要测试的方法,并检查被测试的类在运行后是否具有正确的状态,使用其上的getter或方法本身返回的值。 在这种情况下,测试void方法可能有点困难,因为您可能不得不为测试添加getter,这会破坏封装。 所以不要这样做。 另一种方法是使用状态捕获存根类作为依赖项,但这可能很糟糕,因为存根本身包含一些未经测试的逻辑。
测试您所测试的类的行为 。 在运行您要测试的方法时,您可以设置对类的依赖性的期望 。 这通常使用模拟框架来实现。 在这种情况下,您基本上不关心您的方法是返回值还是无效。 重要的是在依赖项上调用哪些方法,以及使用哪些参数。 这就是你想要做的,一种更有效的测试方法(并且通常提供更好的覆盖)。 一致地使用这种测试方式也可以确保您的设计良好且适当的OO(强制您进行依赖注入等)
这取决于createMain()
方法的作用。 例如,如果方法设置类中String字段的值,则单元测试应检查以确保String字段设置为正确的值。
您的单元测试还可以检查以确保typeObj
字段已设置(通过调用其相应的getter方法)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.