我在试图通过UUID获得有效订单的位置有一个OrderRepositoryTest个代码

OrderRepositoryTest

@DataJpaTest
@ExtendWith(SpringExtension.class)
@AutoConfigureTestDatabase(connection = EmbeddedDatabaseConnection.H2)
public class OrderRepositoryTest {

    private static final Logger logger = LoggerFactory.getLogger(OrderRepositoryTest.class);

    @Autowired
    OrderRepository orderRepository;

    private static final UUID id2;

    Order order2 = setOrder2();

    static {
        id2 = UUID.randomUUID();
    }

    @BeforeEach
    public void setUp() {
        orderRepository.save(order2);
    }

    @AfterEach
    public void tearDown() {
        orderRepository.deleteAll();
    }

    @Test
    public void OrderRepositoryTest_getValidOrder() {

        Assertions.assertThat(id2).isEqualTo(order2.getUuid());

        // TODO unit test get valid order using orderRepository.findOrderByUuid()
    }

    public Order setOrder2() {

        return Order
                .builder()
                .uuid(id2)
                .build();
    }

}

Order

@Getter
@Setter
@Builder
@ToString
@Jacksonized
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table(name = "orders")
public class Order {

    @Valid

    @Id
    @GeneratedValue(strategy = GenerationType.UUID)
    UUID uuid;

    // TODO other columns
}

OrderRepository

public interface OrderRepository extends JpaRepository<Order, UUID> {
    Optional<Order> findOrderByUuid(UUID uuid);
}

我会得到错误:Expected [correct_uuid] but was [wrong_uuid].但是,如果我注释orderRepository.save(order2);orderRepository.deleteAll();,两个uuid都匹配,测试将通过.

我的预期结果应该是即使我运行.save()和.Delete()方法,因为UUID id2是一个最终变量,它应该总是相同的.

一百:

我最初try 将id2赋值为:private static final UUID id2 = UUID.randomUUID();,但也失败了.

Note2:

我可以做到以下几点:

@Test
public void OrderRepositoryTest_getValidOrder() {

    UUID order2UUid = order2.getUuid();

    // TODO orderRepository.findOrderByUuid(order2UUid)
}

这将通过测试,但我觉得我应该能够使用最初分配的UUID,因此我没有这样做.

推荐答案

"问题"是id是自动生成的,因为注释@GeneratedValue.当您调用'orderRepository.save(order 2);'时,您在构建订单时传递的id值将被忽略,并自动生成新的UUID.

您不应该为Order设置id,因为它是由持久层自动生成的.

Java相关问答推荐

如何在Spring Boot中创建500错误的响应正文?

Java中不同包中的类之间的配置共享

Spring boot:Bean和动态扩展器

在for—each循环中的AnimationTimer中的if语句'

CAMEL 4中的SAXParseException

给定Java枚举类,通过值查找枚举

所有 case 一起输入时输出错误,而单独放置时输出正确

如何判断一个矩阵是否为有框矩阵?

呈现文本和四舍五入矩形时出现的JavaFX窗格白色瑕疵

JavaFX如何在MeshView中修复多个立方体?

当返回Mono<;Something>;时,不会调用Mono<;void>;.flatMap

将响应转换为带值的键

Java-动态绑定-问题-了解

MimeMessage emlMessage=new MimeMessage(Session,emlInputStream);抛出InvocationTargetException

使SLF4J在Android中登录到Logcat,在测试中登录到控制台(Gradle依赖问题)

Instancio未在日志(log)中显示测试失败消息

Spring Boot中的应用程序.properties文件中未使用的属性

如何使用Criteria Builder处理一对多关系中的空值?

不能在 map 上移除折线

如何通过gradle命令行从build.gradle获得Java targetCompatibility