2012-11-24 147 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對象等於相互獨立的測試。但他們不會是相同的對象。