2011-09-08 67 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() { 
     } 
    } 
} 
相关问题