gpt4 book ai didi

java - 改变单元测试中的对象?

转载 作者:行者123 更新时间:2023-11-28 21:16:23 26 4
gpt4 key购买 nike

我正在尝试测试一个类。这样做,我正在更改对象状态,但由于某种原因,这种更改只是暂时的。

我的意思是:

class ownerTest {

Owner Tom = new Owner(); // creates owner and initializes arraylist of type pet
Pet Doggy = new Pet("Rexy"); // creates pet object doggy

@Test
public void test1() {
Tom.addPet(Doggy); //will add doggy on to tom's arraylist
assertEquals(Doggy, Tom.petList.get(0)); // passes
}

@Test
public void test2() {
assertEquals(Doggy, Tom.petList.get(0)); // fails cause arraylist is empty
}

有人告诉我,我可以像对待普通类(class)一样对待测试类(class)。那为什么对测试单元中的对象所做的更改只是暂时的?

希望得到一些说明。

PS: equals 方法做了相应的调整,所以不是那个。

提前致谢!

最佳答案

Then why are changes made to objects in test units only temporary?

被测对象/夹具的状态具有适合测试场景要求的范围。
为什么您希望在测试期间执行的更改对下一个执行的测试有副作用?
有了这样的宽容度,你就无法知道为什么一个测试失败了,为什么一个测试成功了,因为任何测试都可能改变其他测试的结果。

所以明确地说,每个测试方法都不能与其他方法耦合。
在这里,测试失败是完全有效的:

@Test
public void test2() {
assertEquals(Doggy, Tom.petList.get(0)); // fails cause array is empty
}

通常,测试方法测试被测类的 public.protected 方法或这些方法之一的特定场景。所以 test1()test2() 是错误的命名选择。

例如:

@Test
public void add_and_get() {
Tom.addPet(Doggy); //will add doggy on to tom's arraylist
assertEquals(Doggy, Tom.petList.get(0));
}

@Test
public void get_when_not_existing_returns_null() {
assertNull(Tom.petList.get(0));
}

I've been told that I can treat test classes much like normal classes.

没错。测试类很重要,必须作为一等公民处理,因为它们存在于应用程序的整个生命周期中,它们提供自动回归测试、动态文档和应用程序的一般质量。

关于java - 改变单元测试中的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57466803/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com