首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >测试将来的任何类级别更改

测试将来的任何类级别更改
EN

Stack Overflow用户
提问于 2019-05-21 03:00:34
回答 1查看 36关注 0票数 1

因此,我有一个生成器类,如下所示:

class Person
{

private String age = "";
private String name = "";

public Person withAge(final String age)...
public Person withName(final String name)...

public Person build()...

// Now my question is due to this function
public Person copyWithSomeChange(){
Person person = new Person;
person.
    withAge(this.age+1).
    withName(this.name).
    build();
}
}

因此,上面的类有一个copyWithSomeChange()方法,它使用现有的Person对象创建新的Person对象。

现在,我想确保如果有人向Person类添加了一个新字段,比如SSN,那么他们也不会忘记将该字段添加到copyWithSomeChange()中。我已经使用反射创建了一个单元测试,并做了一些修改,如下所示,但它似乎不太正确。

@Test
public void copyWithSomeChange() throws IllegalAccessException, NoSuchFieldException {

        Person person1 ;// some existing object

        Person person2 = person1.copyWithSomeChange();

        for (Field field : person1.getClass().getDeclaredFields()) {
                final Field temp = person2.getClass().getDeclaredField(field.getName());

                field.setAccessible(true);
                temp.setAccessible(true);

                Assert.assertNotEquals("Mismatch in values for field " + field.getName(), field.get(person1), temp.get(person2));

           }
        }
    }

这个测试的工作方式是,它只是确保年龄和名称的默认值被更改。

我在这里采取了一个完全错误的方法,我认为这是一件很好的事情,但是如何以正确的方式去做呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-21 03:16:28

现在,我想确保如果有人在Person类中添加了一个新字段,比如SSN,那么他们也不会忘记将该字段添加到copyWithSomeChange()中。

单元测试通常不会根据被测组件中的代码修改来“更新”断言。

而你可以依靠反射来做这样的事情。

但是,断言仍然是非常松散的。如果您在编写单元测试时不知道某个字段存在,也不知道在副本中更改该字段的方式,那么如何在该字段上编写特定的断言呢?

我认为,在您的情况下,避免错误编程的最好方法是使用TDD或类似的方法,首先关注测试,然后关注实现。

通过这种方式,您一定会发现实现中的不足。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56226697

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档