在测试之间传递JUnit数据

时间:2010-06-29 21:27:30

标签: java junit

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

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

5 个答案:

答案 0 :(得分:20)

那么,对于单元测试,你的目标应该是测试最小的孤立代码片段,通常是按方法测试。 因此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");
    }
}

答案 1 :(得分:12)

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

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

答案 2 :(得分:3)

这些测试需要多长时间?如果不是很多,那么为什么要出汗呢。当然你会不必要地创造一些物品,但这会花多少钱呢?

@Test
void testCreateObject() {
    Object obj = unit.createObject();
}

@Test
void testReadObject() {
    Object obj = null;
    try {
        obj = unit.createObject(); // this duplicates tests aleady done
    } catch (Exception cause) {
        assumeNoException(cause);
    }
    unit.readObject(obj);
}

答案 3 :(得分:3)

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

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

@Test
public void method2() {
    Assert.assertThat(something, is(storage));
}

答案 4 :(得分:2)

在这个基本例子中,变量在测试A中被改变,并且可以在测试B中使用

public class BasicTest extends ActivityInstrumentationTestCase2 {
    public BasicTest() throws ClassNotFoundException {
        super(TARGET_PACKAGE_ID, launcherActivityClass);        
    }

    public static class MyClass {    
        public static String myvar = null;              
        public void set(String s) {
            myvar = s;
        }               
        public String get() {
            return myvar;
        }
    }

    private MyClass sharedVar;

    @Override
    protected void setUp() throws Exception {
        sharedVar = new MyClass();
    }

    public void test_A() {
        Log.d(S,"run A");
        sharedVar.set("blah");
    }

    public void test_B() {
        Log.d(S,"run B");       
        Log.i(S,"sharedVar is: " + sharedVar.get());        
    }

}

输出结果是:

运行A

运行B

sharedVar是:blah