繁体   English   中英

单元测试和断言void方法的案例

[英]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()除了......设置之外还做了什么。

所有这些名称: PersonPersonObjtypeObj应该与JavaBean规范的一致性和兼容性相同。

单元测试时基本上有两种不同的理念。

  • 测试您测试的类的状态 您通常运行要测试的方法,并检查被测试的类在运行后是否具有正确的状态,使用其上的getter或方法本身返回的值。 在这种情况下,测试void方法可能有点困难,因为您可能不得不为测试添加getter,这会破坏封装。 所以不要这样做。 另一种方法是使用状态捕获存根类作为依赖项,但这可能很糟糕,因为存根本身包含一些未经测试的逻辑。

  • 测试您所测试的类的行为 在运行您要测试的方法时,您可以设置的依赖性期望 这通常使用模拟框架来实现。 在这种情况下,您基本上不关心您的方法是返回值还是无效。 重要的是在依赖项上调用哪些方法,以及使用哪些参数。 这就是你想要做的,一种更有效的测试方法(并且通常提供更好的覆盖)。 一致地使用这种测试方式也可以确保您的设计良好且适当的OO(强制您进行依赖注入等)

这取决于createMain()方法的作用。 例如,如果方法设置类中String字段的值,则单元测试应检查以确保String字段设置为正确的值。

您的单元测试还可以检查以确保typeObj字段已设置(通过调用其相应的getter方法)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM