【问题标题】:JUnit | How to pass parameters returned from one Junit test into another JUnit testJUnit |如何将从一个 Junit 测试返回的参数传递给另一个 JUnit 测试
【发布时间】:2014-12-15 06:05:06
【问题描述】:

我有一个 junit 测试 testArchive()。 Junit 测试测试归档文件并将 URL 作为字符串返回给它的 archive() 方法。 URL 被定义为 Junit Test 类中的一个实例变量。

class Prepare {    
    private String url = "";

    @Test
    public void testArchive() {
        String url = getService().archive();
    }

    @Test
    public void testSendEmail() {
        getService().sendEmail(url) // Url is turning out to be null
    }
} // end of class

我正在为发送 URL 的 sendEmail() 编写另一个 Junit 测试。但是 URL 被证明是空的,尽管它被定义为一个类变量

您能否告诉我我需要如何更正我的 Junit 测试以发送电子邮件?

谢谢

【问题讨论】:

  • 一个测试不应依赖于另一个测试的成功。将url 变量设置为testSendEmail 方法中的相关变量。

标签: java unit-testing junit


【解决方案1】:

请记住:

  • 测试用例不应有副作用:.archive() 看起来会产生副作用
  • 测试用例不应假设其他测试用例的执行顺序:您的testSendEmail 似乎假设testArchive 先执行,这是错误的
  • 测试用例不应依赖于外部因素:getService 调用看起来像是一个外部(不受控制的)因素
  • 测试用例应该是独立且自包含的

不是一个测试用例取决于另一个测试用例的结果, 您可以使用两个测试用例都可以调用的私有辅助方法。

【讨论】:

    【解决方案2】:

    简答:

    你真的不应该那样做。

    详细回答:

    单元测试(因此也包括 JUnit 测试)旨在独立运行。每个测试应该只检查一种方法,而不管另一种方法或另一种测试的结果。因此,在您的情况下,方法 testSendEmail() 应该使用一些硬编码的 URL,或者最好使用几个不同的 URL。

    【讨论】:

      【解决方案3】:

      我删除了第二个 JUnit 测试并将测试合并为 1 个。存档和电子邮件都将在一个测试中发生。

      【讨论】:

        猜你喜欢
        • 2011-01-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-14
        • 1970-01-01
        • 2020-09-19
        相关资源
        最近更新 更多