在测试之间传递JUnit数据

orb*_*ish 24 java junit

我刚刚发现在创建一些CRUD测试时,你无法在一次测试中设置数据,并在另一次测试中读取数据(数据在每次测试之间都被设置回初始化).

我要做的就是(C)用一个测试来创建一个对象,然后用(R)用下一个测试来创建它.JUnit是否有办法做到这一点,或者它是否在意识形态上编码,以便不允许测试相互依赖?

Jas*_*ang 22

那么,对于单元测试,你的目标应该是测试最小的孤立的代码片段,通常是按方法测试.所以testCreate()是一个测试用例,并testRead()是另一回事.但是,没有什么可以阻止您创建testCreateAndRead()一起测试这两个函数.但是如果测试失败,那么测试失败的代码单元是什么?你不知道.那些测试更像是集成测试,应该区别对待.

如果你真的想这样做,你可以创建一个静态类变量来存储由testCreate()它创建的对象,然后使用它testRead().

因为我不知道你在说什么版本的Junit,所以我只拿起古老的Junit 3.8:

完全丑陋但有效:

public class Test extends TestCase{

    static String stuff;

    public void testCreate(){
        stuff = "abc";
    }

    public void testRead(){
        assertEquals(stuff, "abc");
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 你能保证这个有用吗?您是否定义了JUnit将以何种顺序可靠地执行这些测试? (8认同)
  • @oldrinb ....不再......因为它已被所有测试工具采用......他们已经添加了多个功能,现在使它成为一个单元和集成测试工具 (2认同)

And*_*mas 12

JUnit推动独立测试.一种选择是将两个逻辑测试放入一个@Test方法中.

部分创建TestNG以允许测试之间的这些依赖性.它强制执行测试依赖项的本地声明 - 它以有效顺序运行测试,并且不运行依赖于失败测试的测试.有关示例,请参见http://testng.org/doc/documentation-main.html#dependent-methods.


Lon*_*yen 6

JUnit 是独立的测试。但是,如果你没有办法,你可以使用“静态”实例来存储它。

static String storage;
@Test
public void method1() {
    storage = "Hello"
}

@Test
public void method2() {
    Assert.assertThat(something, is(storage));
}
Run Code Online (Sandbox Code Playgroud)