【发布时间】:2020-07-08 12:41:23
【问题描述】:
我有这个问题。我在一个类中有一个方法,它给了我一些返回值。此方法还会更改该类实例的状态。我需要对它们进行单元测试,所以我为返回值制作了测试用例并复制了它们,只是将断言从测试返回值更改为测试表示的变化(我测试这个类的唯一方法是测试它的代表)。但是,这似乎不是一个很好的处理方法。如果我对类的功能进行了更改,我将不得不在两个测试用例中更改 AAA 中的 Act。我该如何进行测试?有什么模式可以做到这一点吗?在一个测试中同时拥有两个断言意味着我将在一个测试用例中测试两件事。在某些语言(如 JavaScript)中,我知道我可以使用功能、返回值的断言和表示的断言创建一个元组数组,但我不确定 a) 比某些副本好多少- 粘贴和 b) 用其他语言做什么(例如,在 C# 中,我想我必须使用断言创建一些类并将它们包含在测试用例中)。
编辑:例如:
class A {
state;
foo(animal, foodAmount) {
let returnResult = {};
//does things with animal and foodAmount
//which things change BOTH returnResult and the state variable
return returnResult;
}
bar() {
let stateToReturn = "";
//state is used to change the stateToReturn variable
return stateToReturn;
}
}
在这里我将测试函数 foo 与 a) 当前不存在的动物,b) 存在的动物,我将添加非零量的食物以确保食物量发生变化,c) 两种不同的动物以确保它们不会干扰彼此的食物量等。我将进行所有这些测试并确保 returnResult 变量是正确的。问题是我需要确保它不仅会影响 returnResult 变量,还会影响状态。 bar 函数是我查看内部状态的唯一方法。我将如何测试 foo 函数?我会写两次所有测试吗(一次检查 foo 返回正确的结果,一次检查 foo 正确更改状态)?
【问题讨论】:
-
能否提供更多上下文和/或代码示例?这个问题比较笼统。我可以给出一些通用的建议,但这可能会导致盲目的测试。
-
@PhilipWeinke 我添加了一个示例。很抱歉这么晚才添加,但我昨天无法添加。
标签: unit-testing automated-tests