是否可以使用junit和mockito创建嵌套单元测试?

jor*_*rfx 1 java junit unit-testing 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() {
    }
}
Run Code Online (Sandbox Code Playgroud)

}

这是我想要做的但是如果嵌套到类中我不能运行单元测试.

avh*_*avh 5

我是JUnit TestRunner的作者,junit-nested,我认为可以做你想做的事:https: //github.com/avh4/junit-nested

但是,从您的示例中,您不清楚为什么需要嵌套测试.使用它们的典型原因是共享设置行为,但您应该考虑是否更适合使用单独的测试类.

在任何情况下,这里都是如何使用junit-nested来实现的:(由于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() {
        }
    }
}
Run Code Online (Sandbox Code Playgroud)