将测试方法放在与您正在测试的类相同的类中是否有任何问题?
因此,将[TestFixture]属性添加到每个类中,并将[Test]方法与实际方法一起使用。
我喜欢这个主意。把所有东西放在一个地方。
但是,如果有的话,这是什么缺点呢?
/我使用Nunit和c#。
答案 0 :(得分:20)
是的,这是一个需要避免的模式。至少出于以下原因,测试应该是与您的运输代码完全独立的实体
private
/ protected
构造作弊。相反,他们被迫通过公共API点答案 1 :(得分:8)
这种方法激励了我的灵魂。
我认为将测试代码与生产代码分开会更有意义。原因很多:
最重要的是:
只是平原感觉/气味错误。
答案 2 :(得分:6)
是。这将打破单一责任原则。它会降低可读性。您将依赖项添加到测试框架中。
答案 3 :(得分:4)
最大的缺点:您必须发送测试,并且它们可能成为您的公共API的一部分。
答案 4 :(得分:2)
缺点?
您的类在技术上将拥有比在生产环境中使用所需的方法更多的方法。您还将在生产环境中引用nUnit。
你也在这里打破职责分离。你的班级应该完成这项工作,你的考试应该验证你的班级能否胜任。
答案 5 :(得分:2)
一个潜在的缺点是,当您运送代码时,您还必须运送所有测试,使可交付的二进制文件变得更大,充满了永远不会被调用的测试方法。
更具哲学性的缺点是,虽然您确实将所有内容保持在一起,但您未能将代码本身(业务逻辑)的关注点与质量保证的关注点分开(确保其正常工作)。尝试根据每个类/文件的单一责任来考虑您的代码,并查看它的用途。
答案 6 :(得分:2)
你不想走快捷方式。
您不想测试私有方法。您尤其不希望将私有方法用作单元测试的辅助方法(即,在测试中重用它们)。
在测试项目中对测试类进行分组要好得多。这些不会影响正在测试的代码,并且更容易概述您拥有的代码。
以同样的方式,您不会混合UI和业务逻辑代码。
所以,请,请相当,请不要将测试与他们的测试对象混合!
答案 7 :(得分:1)
我看到的最大问题是,您不希望在代码库中分发单元测试作为最终产品的一部分(因此也是依赖性)。
在这种情况下,使用跟踪常量有条件地构建它们会变得非常丑陋。例如,测试夹具属性的一个条件和方法或方法组的至少一个条件。
有很多方面可以解释为什么不这样做,如已经泛滥的答案数组中所示 - 就是不要这样做。
答案 8 :(得分:1)
投入我的两分钱:
我同意这里的大多数帖子,说明为测试的唯一目的创建测试方法/功能是浪费的,并且可能在结构上混乱。
但是,一般而言,当您开发“考虑到测试”时,您可以设计您的实现以进行测试。例如,您最初可能会设计一个函数/方法来使用类变量。但是,如果您想测试该方法的功能,可以将其设计为将类变量的值“传入”作为函数参数。
现在你的方法功能齐全,可以测试,即功能测试。
所以,你可以设计你的课程以便以后进行测试,同时不会因为测试的唯一目的而创造一个方法的所有负面因素。
我希望这会有所帮助。这个wiki给出了编程测试的一个很好的概述,一般来说: http://en.wikipedia.org/wiki/Software_testing
答案 9 :(得分:0)
是。首先,它使您的类更大 - 测试使用的每个属性或字段必须在内存中随处使用。其次,它为类添加了一堆公共方法和属性,这些方法和属性对于像工厂这样的东西是可见的。
如果您希望您的测试与您的课程一起使用,只需将它们放在同一个文件中:
public class Foo : IFoo
{
...
}
[TestFixture]
public class Foo_Tests
{
...
}