java - 如何测试在构造函数中也调用该方法的类的方法? (JUnit)

标签 java junit tdd

我是测试驱动开发(TDD)的初学者。我经常遇到一些感觉不像正确做事方式的事情:

以一个名为 loadStuff() 的方法为例,如果加载或未加载内容,该类将返回 truefalse 。该方法在类的构造函数中调用。

public class Main {
    public static void main(String[] args) {
        new Main();
    }

    public Main() {
        if (loadStuff())
            System.out.println("Stuff was loaded from constructor");
        else
            System.out.println("Stuff was not loaded from constructor");
    }

    boolean loadStuff() {
        boolean stuffWasLoaded = true;
        //...
        return stuffWasLoaded;
    }
}

我想使用 JUnit 测试这个 loadStuff() 方法。令我困扰的是,在我实际测试它之前,我尝试测试的方法正在类的构造函数中被调用:

import org.junit.Test;

import static org.junit.Assert.*;

public class MainTest {

    @Test
    public void testLoadStuff() throws Exception {
        Main main = new Main();

        assertTrue("Stuff was not loaded from test.", main.loadStuff());
    }
}

测试通过,这是输出:

Stuff was loaded from constructor

Process finished with exit code 0

我觉得我的做法是错误的,但不确定有更好的方法。

测试在该类的构造函数中调用的类方法的正确方法是什么?

最佳答案

这是全新的代码吗?就好像使用 TDD 一样,您所描述的情况应该不会出现。

循环是:

  1. 编写一个失败的(但编译测试)
  2. 编写最少数量的代码来通过测试
  3. 重构(整理并删除重复项)

在此之后,不可能在构造函数中调用未经测试的方法。

您想要测试类的行为,而不是单个方法本身。决定您想要什么行为,编写一个测试用例来测试预期的输出,然后编写代码。

关于java - 如何测试在构造函数中也调用该方法的类的方法? (JUnit),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33402536/

相关文章:

java - 单元测试与 Spring 的集成测试

java - JUnit 测试 : Improvement to test case, 测试数组列表的长度?

ios - 如何从 OCMock 开始并检查方法是否被调用

unit-testing - RIA 开发中的测试驱动开发/集成测试

java - 从 eclipse 导出 WAR,找不到 mysql 驱动程序。从 Eclipse 运行时很好

java - 使用 Tomcat 和 cookie 进行 session 管理

java - Android Runtime.getRuntime().exec 命令导致应用程序在获取输出之前卡住

java - PowerMockRunner 不应用 JUnit ClassRules

Java - 空变量是否需要内存空间

ruby-on-rails - capybara 和 Rspec。 capybara 不在测试中呈现页面,在 Rails 中使用访问或获取方法