java - 单元测试应该使用绝对值吗?

标签 java unit-testing testing

<分区>

我对一个在两个类之间进行映射的方法进行了单元测试。

@Test
public void testMapping() {
    MappingClass mappingClass = new MappingClass();
    FromClass fromClass = new FromClass("string.value");

    ToClass toClass = mappingClass.map(fromClass);

    //This...
    assertEquals(fromClass.getStringValue(), toClass.getMappedStringValue());
    //... or this?
    assertEquals("string.value", toClass.getMappedStringValue());
}

getter 巧合地包含相同的字符串值,我相信代码是这样写的,因为作者知道 map 方法会调用 getter。正是出于这个原因,我期望绝对值,因为从 TDD 的角度来看,您应该不知道实现。

与评估派生值相比,单元测试评估主题的绝对值有什么好处?

编辑:为避免混淆,实现方式如下:

public class FromClass {
    private String stringValue;

    public FromClass(String stringValue) {

        this.stringValue = stringValue;
    }

    public String getStringValue() {
        return stringValue;
    }
}

public class ToClass {

    private String mappedStringValue;

    public ToClass(String mappedStringValue) {
        this.mappedStringValue = mappedStringValue;
    }

    public String getMappedStringValue(){
        return mappedStringValue;
    }
}

public class MappingClass {

    public ToClass map(FromClass fromClass){
        return new ToClass(fromClass.getStringValue());
    }
}

最佳答案

在这种情况下我会做 预期字符串="string.value";并使用它两次(实际一次,预期一次)我认为它表明意图很好。它表明重用值(value)不是偶然的,而是意料之中的。

此外,我认为如果写成这样,测试会更具可读性

@Test public void testMapping() {
MappingClass sut= new MappingClass(); //sut=system under test
FromClass fromClass = new FromClass("string.value");

ToClass actual= mappingClass.map(fromClass);
ToClass expected = //construct new object

assertEquals(expected, actual);

这需要在 ToClass 对象中正确实现 equals。在这个解决方案中,可以防止更改(ToClass 中的新字段)。 为确保您的 equals 实现对 ToClass 中的更改是防弹的,您可以为 equals/hashcode 编写另一个测试。使用 https://github.com/jqno/equalsverifier - 如果您向 ToClass 添加新字段,您的 equals 测试将失败。

值对象(如 FromClass、ToClass)中的 Equals/hashcode/toString 实现是个好主意 - 它使这些类更强大(它们可以是 Map 中的键、Set 中的元素等)并且使用愉快。

关于java - 单元测试应该使用绝对值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49843083/

相关文章:

javascript - Jasmine:如何测试 GET 请求中是否调用了正确的 URL

php - Laravel 测试 dontSee 否定英文文本

尝试运行应用程序时找不到 Xcode 文件

Java 使用 fileoutstream 内存不足

java - 在 JAVA 中解码谷歌翻译 API 响应

带有静态数组的java空指针异常

java - 使用列表反序列化 JSON 包装对象会返回 null 属性

javascript - 使用 Angular JS 进行 Jasmine 测试

iOS 自动化测试题

python - 如何自动销毁django测试数据库