如何为创建新对象的void方法编写junit测试用例

时间:2013-07-31 16:08:25

标签: java junit junit4 testcase

public class SupportController{

    public void disableUserAccount(String username) throws Exception {
        UserAccount userAccount = 
                new UserAccount(Constants.SYSTEM, Constants.CONTAINER, username);
        UserAccount.disableAccount();
    }
}

我如何测试创建的useraccount是否被禁用?

2 个答案:

答案 0 :(得分:1)

我建议使用Mock Objects

除此之外,您还可以查看JUnit FAQ,在那里可以找到有关返回void的测试方法的部分。

  

通常,如果方法不返回值,则会有一些方面   影响。实际上,如果它没有返回值并且没有一方   效果,它没有做任何事情。

     

可能有一种方法可以验证副作用是否实际发生了   预期

答案 1 :(得分:1)

有三种基本解决方案:

  1. 使用可以模拟的工厂类
  2. 使用可以模拟calls to constructors
  3. 的PowerMock
  4. 更新类以使用可在测试环境中覆盖的默认范围或受保护范围工厂方法。
  5. PowerMock并不总能与其他参赛者一起比赛(例如SpringJUnit4TestRunner)。我通常会因为这个原因而避免使用它,并且它会修改已编译的代码。

    可覆盖的工厂方法是另一种选择。为此,您必须扩展类并覆盖工厂方法。这意味着测试是针对被测试类的实例运行的,该实例实际上不是被测试的类,而是可测试的子类。这对我来说有味道,所以我倾向于尽可能避免它。

    工厂类方法是我首选的解决方案。传入默认的Factory类创建UserAccount。在您的测试中提供了一个模拟(我使用Mockito)版本的工厂。