【问题标题】:How to write a junit testcase for a void method that creates a new object如何为创建新对象的 void 方法编写 junit 测试用例
【发布时间】:2013-08-01 06:41:45
【问题描述】:
public class SupportController{

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

我将如何测试创建的用户帐户是否被禁用?

【问题讨论】:

  • disableAccount()static 方法吗?

标签: java junit junit4 testcase


【解决方案1】:

有三种基本解决方案:

  1. 使用可模拟的工厂类
  2. 使用可以模拟calls to constructors的PowerMock
  3. 更新类以使用默认范围或受保护范围工厂方法,该方法可在测试环境中被覆盖。

PowerMock 并不总是与其他跑步者(例如 SpringJUnit4TestRunner)配合得很好。由于这个原因以及它修改编译代码的事实,我通常会避免它。

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

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

【讨论】:

  • 谢谢我不知道工厂类。我会试试的
【解决方案2】:

我建议使用Mock Objects

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

通常如果一个方法没有返回值,它会有一些方面 影响。实际上,如果它不返回值并且没有边 效果,它什么也没做。

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

【讨论】:

  • MockObjects 是否允许/指定如何模拟构造函数调用?如果是,请提供信息。否则标准模拟将在这里不起作用,因为该方法在内部创建实例。
  • 如果从未返回或在我的测试用例中调用它以检查副作用是否有效,我将如何比较从此方法创建的用户帐户
猜你喜欢
  • 2023-02-17
  • 1970-01-01
  • 1970-01-01
  • 2017-09-02
  • 2011-08-23
  • 1970-01-01
  • 2021-11-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多