0
我已经看过如何通过模拟Static方法对使用Utility类的类进行单元测试,但是我还没有弄清楚如何单元测试实际的效用类。如何使用Powermockito在Java中测试实用程序类
下面是工具类
public class DbNameContextHolder {
private static final ThreadLocal<String> contextHolder = new ThreadLocal<String>();
public static void setDbName(String dbName){
contextHolder.set(dbName);
}
public static String getDbName(){
return (String) contextHolder.get();
}
public static void clearDbName(){
contextHolder.remove();
}
}
这是我到目前为止已经试过了单元测试
@RunWith(PowerMockRunner.class)
@PrepareForTest({DbNameContextHolder.class, ThreadLocal.class})
public class DbNameContextHolderTest {
@SuppressWarnings("rawtypes")
@Mock
ThreadLocal threadLocalMock;
@Before
public void init() throws Exception{
PowerMockito.whenNew(ThreadLocal.class).withNoArguments().thenReturn(threadLocalMock);
}
@Test
public void setsDBName(){
DbNameContextHolder.setDbName("someName");
verify(threadLocalMock).set("someName");
}
@Test
public void getsDbName(){
DbNameContextHolder.getDbName();
verify(threadLocalMock).get();
}
@Test
public void clearsDBName(){
DbNameContextHolder.clearDbName();
verify(threadLocalMock).remove();
}
}
如何嘲笑一个实用工具类这样吗?
为什么你甚至在这里使用模拟?为什么不测试类的预期**行为**:从线程1调用getDbName()应该返回null。设置名称,然后从线程1获取它应该返回名称。从线程2获取它仍然应该返回null。等等。 –
@JBNizet谢谢,这是我需要的方向。我变得太复杂了。 –
你应该问自己你的测试的目的是什么。通常你不应该测试实现的细节(方法x和对象y被调用),但是如果你的类的合约被保留。 –