Vin*_*C M 7 java junit mocking mockito
我有以下场景
interface DAO
{
String a();
String b();
String c();
}
Run Code Online (Sandbox Code Playgroud)
我创建了一个这个DAO接口的模拟器,并将其提供给称为DAOProcess的东西.在DAOProcess中,我有各种方法调用DAO方法a,b和c.
现在每次我需要在DAOProcess中对一个方法进行单元测试时,我最终都会写when(mockDAO.a()).thenReturn("test").
无论如何,我可以将这些when(mockDAO.a()).thenReturn("test")共同点移动到所有测试用例中吗?
Jon*_*han 10
如果您的测试用例都在一个类中,您可以使用注释的方法@Before,例如:
...
private DAO mockDAO;
@Before
public void setUp() {
mockDAO = mock(DAO.class);
when(mockDAO.a()).thenReturn("test");
...etc...
}
...
Run Code Online (Sandbox Code Playgroud)
或者,如果您需要许多测试类的行为,您可以编写一个实用程序类来设置Mock实例上的行为,例如:
public class MockDAOPrototype {
public DAO getMockWithDefaultBehaviour() {
final DAO mockDAO = mock(DAO.class);
when(mockDAO.a()).thenReturn("test");
...etc...
return mockDAO;
}
}
Run Code Online (Sandbox Code Playgroud)
然后调用MockDAOPrototype.getMockWithDefaultBehaviour()你的setUp方法.
您可以创建一个 AbstractTestCase 类,该类abstract由您需要此模拟的所有测试用例扩展。在该抽象测试用例中,您将拥有以下语句。
@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")
....
}
}
Run Code Online (Sandbox Code Playgroud)
在你的具体测试用例类中,你会
public class MyConcreteTestCase extends AbstractTestCase
{
@InjectMocks
@Autowired
private DAOProcess daoProcess;
....
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5537 次 |
| 最近记录: |