在测试之间传递JUnit数据

问题描述 投票:22回答:5

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

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

java junit
5个回答
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");
    }
}

12
投票

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

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


3
投票

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

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

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

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);
}

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是:等等

© www.soinside.com 2019 - 2024. All rights reserved.