2012-11-24 112 views
1

我尝试为我的测试使用不同的实例,但第一个实例始终使用。 在第二次测试期间,它显示的是第一个实例的内容。 我不知道在哪里寻找。在JUnit测试中使用旧实例

public class MyActivityTest extends 
    ActivityInstrumentationTestCase2<MyActivity> { 

private Solo solo; 

public MyActivityTest() { 
    super(MyActivity.class); 
} 

protected void setUp() throws Exception { 
    super.setUp(); 
    Authentication.setSessionId("mysessionid", this.getInstrumentation() 
      .getTargetContext().getApplicationContext()); 
    solo = new Solo(getInstrumentation(), getActivity()); 
} 

public void testFailFetching() { 

    CommunicationFactory.setInstance(MyActivityData.FALSE_QUIZCOMM_DEFAULT); 

    //some Solo tests 

} 

public void testSucceedFetching() { 

    CommunicationFactory.setInstance(MyActivity.CORRECT_QUIZCOMM_DEFAULT); 

    //some Solo tests 

} 

@Override 
protected void tearDown() throws Exception { 
    CommunicationFactory.setInstance(null); 
    super.tearDown(); 
} 
} 
+0

getInstrumentation()和getActivity()的返回值在每个测试之间会有所不同。否则,你可能会创建一个相同的'Solo'对象。 –

回答

0

setUp()方法将在每次测试之前调用。假如它完成而没有抛出异常(这可能会中止你的测试),你的solo变量正在为每个测试重建。后续的测试代码说明了这一点:

public class ExampleTest extends TestCase { 
    private static int num = 1; 

    private Foo foo; 

    @Override 
    protected void setUp() throws Exception { 
    super.setUp(); 
    foo = new Foo(num++); 
    } 

    public void testA() { 
    foo.printNum(); 
    } 

    public void testB() { 
    foo.printNum(); 
    } 

    private static class Foo { 
    private final int num; 

    public Foo(int num) { 
     this.num = num; 
    } 

    public void printNum() { 
     System.out.println(num); 
    } 
    } 
} 

此打印:

1 
2 

这是可能的Solo对象等于相互独立的测试。但他们不会是相同的对象。