gpt4 book ai didi

c# - 使用另一个被测试的函数来为实际测试做准备是不是单元测试的好方法?

转载 作者:太空狗 更新时间:2023-10-29 22:53:49 27 4
gpt4 key购买 nike

我正在尝试使用 NUnit 进行单元测试。目前,我正在编写一个简单的测试来习惯单元测试的语法和方式。但我不确定我是否通过以下测试做对了:

被测类包含一个包含水果名称的字符串列表,可以通过 class_under_test.addNewFruit(...) 添加新的水果名称。因此,为了测试 addNewFruit(...) 的功能,我首先使用该方法向列表中添加一个新字符串(例如“Pinapple”),然后在下一步中验证是否列表包含这个新字符串。

我不确定这是否是测试方法功能的好方法,因为我依赖于另一个函数的响应(我已经在之前的单元测试中测试过)。

这个功能是这样测试的,还是有更好的方案?

public void addNewFruit_validNewFruitName_ReturnsFalse()
{
//arrange
string newFruit = "Pineapple";

//act
class_under_test.addNewFruit(newFruit);
bool result = class_under_test.isInFruitList(newFruit);

//assert
Assert.That(!result);
}

最佳答案

在一个完美的世界里,每个单元测试都只能以一种方式被破坏。每个单元测试都“独立存在”。您的 addNewFruit 测试可以通过破坏 isInFruitsList 来破坏 - 但幸运的是,这也不是一个完美的世界。

因为您已经测试了 isInFruitsList 方法,所以您不必担心。这就像使用第 3 方 API - 它(通常)经过测试,并且您假设它有效。在您的情况下,您假设 isInFruitsList 有效,因为,好吧 - 您测试了它。

绕过“以单一方式损坏”,您可以尝试在内部公开底层水果列表(并使用 InternalsVisibleTo 属性),或通过依赖注入(inject)传递它。问题是——值得付出努力吗?你真正得到了什么?在这种简单的情况下,您通常收获很少,而且引入此类结构的开销通常不值得花时间。

关于c# - 使用另一个被测试的函数来为实际测试做准备是不是单元测试的好方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9018142/

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