是否有类似于Mockito中的Junit设置方法的东西



我有以下方案

 interface DAO
 {
      String a();
      String b();
      String c();
 }

我创建了一个DAO接口的模拟,然后将其馈送到称为Daoprocess的东西。在daoprocess内部,我有多种调用dao方法a,b和c。

的方法

现在,每次我都需要在Daoprocess中测试一种方法时,我最终会编写when(mockDAO.a()).thenReturn("test")

无论如何,我可以将这些when(mockDAO.a()).thenReturn("test")移动到所有测试用例中吗?

如果您的测试用例全部都在一个类中,则可以使用用@Before注释的方法,例如:

...
private DAO mockDAO;
@Before 
public void setUp() {
    mockDAO = mock(DAO.class);
    when(mockDAO.a()).thenReturn("test");
    ...etc...
}    
...

或,如果您需要在许多测试类上进行行为,则可以编写一个实用程序以在模拟实例上设置行为,例如:

public class MockDAOPrototype {
    public DAO getMockWithDefaultBehaviour() {
        final DAO mockDAO = mock(DAO.class);
        when(mockDAO.a()).thenReturn("test");
        ...etc...
        return mockDAO;
    }
}

,然后在您的setUp方法中调用MockDAOPrototype.getMockWithDefaultBehaviour()

您可以创建一个abstract的AbstractTestCase类,并通过需要此模拟的所有测试用例扩展。在该抽象测试案例中,您将具有以下语句。

 @Ignore // just in case your runner thinks this is a JUnit test.
 public abstract class AbstractTestCase
 {
      @Mock
      private DAO mockDAO;
      @Before
      private void setupMocks()
      {
           when(mockDAO.a()).thenReturn("test")
           ....
      }
 }

在您的具体测试案例类中,您将

 public class MyConcreteTestCase extends AbstractTestCase
 {
      @InjectMocks
      @Autowired
      private DAOProcess daoProcess;
      ....
 }

相关内容

  • 没有找到相关文章

最新更新