【问题标题】:JUnit tests getter called before setter [duplicate]JUnit测试在setter之前调用的getter [重复]
【发布时间】:2019-02-27 12:03:01
【问题描述】:

JUnit 中是否有一个地方可以定义要测试的方法应该如何流动?

我有一个名为Location 的课程,我已经为其编写了一个测试。除了在testSetName 之前调用的testGetName 之外,所有测试都通过了。

它使测试失败。我该如何解决这个问题?

public class LocationTest {

    Location instance;

    @Before
    public void setUp() {
        instance = new Location();
    }              

    @Test
    public void testGetLongitude() {
        System.out.println("getLongitude");
        double expResult = 0.0;
        double result = instance.getLongitude();
        assertEquals(expResult, result, 0.0);
    }    

    @Test
    public void testSetLongitude() {
        System.out.println("setLongitude");
        double longitude = 0.0;
        instance.setLongitude(longitude);
    }    

    @Test
    public void testSetName() {
        System.out.println("setName");
        String name = "";
        instance.setName(name);
    }

    /**
     * Test of getName method, of class Location.
     */
    @Test
    public void testGetName() {
        System.out.println("getName");
               String expResult = "Mock Location";
        String result = instance.getName();
        assertEquals(expResult, result);
    }

}

【问题讨论】:

  • 天哪,不要这样做。测试您的班级所需的行为。不要为每个单独的方法编写测试。坦率地说,为 getter 和 setter 编写测试确实不能很好地利用您的时间。
  • @DawoodibnKareem,我 100% 同意最后一点,尤其是当我们有像 auto-value 这样的东西专门设计用于消除编写值类的所有冗余的需要时

标签: java junit


【解决方案1】:

简短回答:不,没有。

长答案:很确定这里已经有一个关于这个主题的问题。

一般来说,测试不应该在测试之间保持状态,所以如果你有一个依赖于 setter 测试的 getter 测试,很可能你做错了测试。

如果您想测试 getter 和 setter,请在一个测试中完成所有操作;即使用 getter 测试 setter,如果两个操作都成功,则 getter 和 setter 工作!


要回答您的问题,JUnit 必须为此提供一项帮助,可在此处找到:

https://github.com/junit-team/junit4/wiki/test-execution-order

简而言之,您必须对测试进行排序的选项是依赖JVM 指定的顺序,或方法名称的字典顺序。这些不会解决您的问题,因为您似乎想要一个非常具体的订单;即set -> get

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多