繁体   English   中英

单元测试构造函数时有多个断言?

[英]Multiple assertions when unit testing constructor?

我正在尝试用2个构造函数对一个类进行单元测试。 每个构造函数都有多个参数来设置公共属性。 我的问题是,我应该只有2个单元测试和多个断言来检查每个属性是否已设置或每个构造函数的每个参数的测试?

Public Person(string name, string phone, string birthday)
{
   name = name;
   phone = phone;
   birthday = birthday;
}

Public Person(string name) : this(name, null, null)
{}

我从未成为“每次测试只有一个断言”的教条的粉丝。 这对我来说似乎并不实际 - 你最终会对你真正感兴趣的内容产生很多不满(测试声明)。

是的,如果您遇到多个问题,那么您只会遇到一次测试失败。 您修复测试,再次运行它,发现下一个故障,修复它并重复直到成功。 没有很大的损失。

我不是说你应该在每次测试中测试大量的功能 - 但是走向另一个极端也不是务实。

我通常只会针对每个测试使用一个错误条件 - 所以如果你的构造函数实际上会抛出null参数的异常,我会在单独的测试中检查每个错误。 否则很容易意外遗漏。

您正在测试的操作是构造函数接受__参数,并将值设置为正确的值。

因此,我会说每个构造函数有1个测试,每个构造函数都有多个断言,以确保正确设置所有成员。

你可能有兴趣看看Kent Beck自己说的是什么,就在Stack Overflow上。 他说...

我得到的代码是有效的,而不是测试,所以我的理念是尽可能少地测试以达到给定的置信水平(我怀疑这种信心水平与行业标准相比很高,但这可能只是傲慢) 。 如果我通常不会犯一个错误(比如在构造函数中设置错误的变量),我不会测试它。 我确实倾向于理解测试错误,所以当我有复杂条件的逻辑时我会格外小心。 在对团队进行编码时,我会修改策略以仔细测试我们共同出错的代码。

这是链接。

我没有问题,承认这让我重新思考一些我正在做的事情。 为了更好。

我建议不要对每个属性进行一次测试,而是针对每个构造函数进行一次测试。

我想补充一点,根据yor类的使用位置,你可能还希望在name参数为空字符串时进行测试以验证构造函数的行为(否定测试)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM