Java 使用spock和所有测试通过测试我的模型映射器
您好,我对spock groovy测试有问题。我需要为我的模型映射器编写一个单元测试,但我的测试总是通过ok,即使我想写错: 这是我的模型映射器:Java 使用spock和所有测试通过测试我的模型映射器,java,testing,groovy,spock,Java,Testing,Groovy,Spock,您好,我对spock groovy测试有问题。我需要为我的模型映射器编写一个单元测试,但我的测试总是通过ok,即使我想写错: 这是我的模型映射器: public class ModelMapper { public ConferenceRoomDto fromConferenceRoomToConferenceRoomDto(ConferenceRoom conferenceRoom) { return conferenceRoom == null ? null : Co
public class ModelMapper {
public ConferenceRoomDto fromConferenceRoomToConferenceRoomDto(ConferenceRoom conferenceRoom) {
return conferenceRoom == null ? null : ConferenceRoomDto.builder()
.roomName(conferenceRoom.getRoomName())
.description(conferenceRoom.getDescription())
.projector(conferenceRoom.getProjector())
.phoneNumber(conferenceRoom.getPhoneNumber())
.numberOfSeats(conferenceRoom.getNumberOfSeats())
.build();
这是我的测试:
given:
ConferenceRoom conferenceRoom1 = ConferenceRoom.builder()
.roomName("r")
.projector(true)
.description("d")
.phoneNumber("23")
.build()
when:
modelMapper.fromConferenceRoomToConferenceRoomDto(conferenceRoom1)
then:
ConferenceRoomDto conferenceRoomDto1 = ConferenceRoomDto.builder()
.build()
}
这个测试应该失败,因为我给我的会议室提供了值,我希望dto没有值,但所有测试都通过了。好-所以这里的测试有两个问题 =表示分配。要检查是否相等,需要在测试的最后一行使用==。这不是斯波克特有的东西-这是适用于我遇到的每种编程语言的一般规则: a=b表示将值b分配给变量a。 a==b表示“真”,如果a和b在某种程度上“相等”,则表示“真”,否则表示“假”。 Spock期望then块中的代码以表达式结尾,该表达式的计算结果为true,表示测试通过或为false 最后一行,即使使用了right==运算符,实际上也没有将预期值与前一行返回的值进行比较。我相信你想要的是:
when:
def result = modelMapper.fromConferenceRoomToConferenceRoomDto(conferenceRoom1)
then:
result == ConferenceRoomDto.builder().build()
在斯波克,我相信一种更为惯用的表达方式是:
expect:
modelMapper.fromConferenceRoomToConferenceRoomDto(conferenceRoom1)
== ConferenceRoomDto.builder().build()
重申一下,这两个问题都与您使用Spock无关。在任何测试框架或编程语言中,甚至在测试之外,您都会遇到同样的问题。在您的示例中,您没有测试任何东西,因为ConferenceRoomDto conferenceRoomDto1=ConferenceRoomDto.builder.build只是分配而不是测试。这就是为什么考试总是通过的原因 更改对此的测试,例如:
def 'DTO is mapped from bean'() {
given:
ConferenceRoom conferenceRoom1 = ConferenceRoom.builder()
.roomName("r")
.projector(true)
.description("d")
.phoneNumber("23")
.build()
when:
ConferenceRoomDto dto = modelMapper.fromConferenceRoomToConferenceRoomDto(conferenceRoom1)
then:
dto.roomName == 'r'
dto.projector
dto.description == 'd'
dto.phoneNumber == '23'
}
在then部分中,现在有4个进行测试的断言。例如,roomName值等于“r”。测试中有任何断言吗?没有,我使用spock-我读到没有断言,但我认为我解决了这个问题:我随时更改主体,这对我有帮助