如何为创建新对象的void方法编写junit测试用例
public class SupportController{ public void disableUserAccount(String username) throws Exception { UserAccount userAccount = new UserAccount(Constants.SYSTEM, Constants.CONTAINER, username); UserAccount.disableAccount(); } }
我如何测试创建的useraccount是否被禁用?
我建议使用Mock Objects 。
除此之外,您还可以查看JUnit FAQ ,在那里您可以找到有关返回void
测试方法的部分。
通常,如果方法不返回值,则会产生一些副作用。 实际上,如果它没有返回值并且没有副作用,它就没有做任何事情。
可能有一种方法可以validation副作用是否按预期实际发生
有三种基本解决方案:
- 使用可以模拟的工厂类
- 使用可以模拟对构造函数的调用的 PowerMock
- 更新类以使用可在测试环境中重写的默认范围或受保护范围工厂方法。
PowerMock
并不总能与其他跑步者合作(例如SpringJUnit4TestRunner)。 我通常因为这个原因而避免它,以及它修改编译代码的事实。
可覆盖的工厂方法是另一种选择。 为此,您必须扩展类并覆盖工厂方法。 这意味着测试是针对被测试类的实例运行的,该实例实际上不是被测试的类,而是可测试的子类。 这对我来说有味道,所以我倾向于尽可能避免它。
工厂类方法是我首选的解决方案。 UserAccount
默认的Factory类创建UserAccount
。 在你的测试中提供了一个Mockito
(我使用Mockito
)版本的工厂。