我有一段代码需要用 Java UUID (UUID.randomUUID()
) 填充响应对象的一个属性。
我如何从外部对这段代码进行单元测试以检查这种行为?我不知道里面会生成什么UUID。
需要测试的示例代码:
// To test whether x attribute was set using an UUID
// instead of hardcode value in the response
class A {
String x;
String y;
}
// Method to test
public A doSomething() {
// Does something
A a = new A();
a.setX( UUID.randomUUID());
return a;
}
最佳答案
Powermock 和静态模拟是前进的方向。你需要这样的东西:
...
import static org.junit.Assert.assertEquals;
import static org.powermock.api.mockito.PowerMockito.mockStatic;
...
@PrepareForTest({ UUID.class })
@RunWith(PowerMockRunner.class)
public class ATest
{
...
//at some point in your test case you need to create a static mock
mockStatic(UUID.class);
when(UUID.randomUUID()).thenReturn("your-UUID");
...
}
请注意,静态模拟可以在使用 @Before 注释的方法中实现,因此它可以在所有需要 UUID 的测试用例中重复使用,以避免代码重复。
初始化静态模拟后,UUID 的值可以在您的测试方法中的某处断言,如下所示:
A a = doSomething();
assertEquals("your-UUID", a.getX());
关于java - 如何对使用 Java UUID 的代码进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36330914/