java - 如何对使用 Java UUID 的代码进行单元测试?

标签 java unit-testing uuid

我有一段代码需要用 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/

相关文章:

node.js - 如何使用 sinon stub 用 typescript 编写的类的私有(private)方法

JavaScript:GUID 冲突

java - Gradle在testRunTime期间排除本地jar

java - list .MF : difference between Main-Class and Start-Class

algorithm - 单元测试近似算法

ios - 如何知道应用程序是从特定链接安装的

ruby - 如何在 ruby​​ 中一次解压 7 位?

java - 在 TreeTableView 中用数据库数据填充 ComboBox

java - Nifty在Slick中的集成,教程有

java - 使用Spring依赖注入(inject)时如何模拟在其他方法中调用的方法?