2011-09-08 66 views
1

例如:是否有可能使用junit和mockito創建嵌套單元測試?

@RunWith(MockitoJUnitRunner.class) 
public class ClientFormServiceTest { 
    @Mock 
    ClientFormService clientFormService; 

    public class GetNewClientFormTest { 
    @Mock 
    protected ClientForm result; 

    @Before 
    public void given() { 
     result = clientFormService.getNewForm(); 
    } 

    @Test 
    public void should_do_something() { 
    } 
} 

public class CreateClientFormTest { 
    @Mock 
    protected ClientForm clientForm; 

    @Before 
    public void given() { 
     clientFormService.createForm(clientForm); 
    } 

    @Test 
    public void should_do_something() { 
    } 
} 

}

這是我想做的事情,但如果嵌套類,我不能運行單元測試。

+0

你應該澄清你的意思是「嵌套」。有效的Java要求每個'public class'都駐留在它自己的同名* .java文件中。因此,如果在該源文件中沒有定義'@RunWith(MockitoJUnitRunner.class)',則代碼示例要求測試類'CreateClientFormTest'與Mockito一起運行。 – Brad

回答

1

你爲什麼要這麼做?如果您的意思是從許多類似測試中的代碼重用中受益,那麼您可以使用通用代碼創建一個基本測試類,並使測試類擴展它。

5

我是一個JUnit的TestRunner,JUnit的嵌套,這一點我相信可以做你想做的作者:https://github.com/avh4/junit-nested

不過,從你的例子目前還不清楚爲什麼你需要嵌套測試。使用它們的典型原因是共享設置行爲,但您應該考慮是否有單獨的測試類更合適。

在任何情況下,這裏是你如何可以使用JUnit嵌套做到這一點:(由於Nested是一個測試運行,你將不得不使用MockitoAnnotations.initMocks()代替的Mockito測試跑步者的)

import net.avh4.test.junit.Nested; 

@RunWith(Nested.class) 
public class ClientFormServiceTest { 
    @Mock 
    ClientFormService clientFormService; 

    @Before 
    public void given() { 
     MockitoAnnotations.initMocks(this); 
    } 

    public class GetNewClientFormTest { 
     @Mock 
     protected ClientForm result; 

     @Before 
     public void given() { 
      MockitoAnnotations.initMocks(this); 
      result = clientFormService.getNewForm(); 
     } 

     @Test 
     public void should_do_something() { 
     } 
    }  

    public class CreateClientFormTest { 
     @Mock 
     protected ClientForm clientForm; 

     @Before 
     public void given() { 
      MockitoAnnotations.initMocks(this); 
      clientFormService.createForm(clientForm); 
     } 

     @Test 
     public void should_do_something() { 
     } 
    } 
} 
相關問題