Questions tagged «unit-testing»

单元测试是一种测试源代码的各个单元以确定它们是否适合使用的方法。

2
如果在业务逻辑更改时失败,则单元测试是否被认为是脆弱的?
请参见下面的代码;它会测试以查看具有性别的女性是否有资格接受要约1: [Fact] public void ReturnsFalseWhenGivenAPersonWithAGenderOfFemale() { var personId = Guid.NewGuid(); var gender = "F"; var person = new Person(personId, gender); var id = Guid.NewGuid(); var offer1 = new Offer1(id,"Offer1"); Assert.False(offer1.IsEligible(person)); } 此单元测试成功。但是,如果将来向女性提供“ Offer1”,它将失败。 可以接受的说法是-如果围绕报价1的业务逻辑发生了变化,那么单元测试就必须发生变化。请注意,在某些情况下(对于某些商品),业务逻辑会在数据库中更改,如下所示: update Offers set Gender='M' where offer=1; 在某些情况下,在域模型中如下所示: if (Gender=Gender.Male) { //do something } 另请注意,在某些情况下,背后的域逻辑会定期更改,而在某些情况下则不会。

6
无需单元测试即可敏捷
如果您正在使用的代码库的单元测试覆盖率为0%,那么谈论“敏捷开发”或声称您正在应用“敏捷方法论”是否有意义?(而且,作为一个团队,您对此没有做任何事情)。 明确一点:对我来说,这没有任何意义。根据我的个人经验,我发现单元测试是使您真正“敏捷”(即响应更改,改进设计,共享知识等)的唯一工具,而TDD是使您达到目标的唯一实践。 。 也许还有其他方法,但是我仍然看不到它们如何工作。

7
我应该担心面试过程中给出的程序设计作业过度工程吗?[关闭]
最近,我对一家公司进行了电话采访。在电话采访之后,我被告知要完成一个简短的编程任务(一个小程序;应该不超过三个小时)。我仅被指示直接完成作业并上交代码。我被赋予了完全自由地使用自己希望使用的任何语言的权限,并且没有确切地告诉我如何上交代码。 我立即计划将其投放到Github上,为其编写测试套件,使用Travis-CI(公共Github存储库的免费连续集成)运行测试套件,并使用CMake构建Travis-CI的Linux makefile。这样,不仅可以证明我了解如何使用Git,CMake,Travis-CI以及如何编写测试,而且还可以直接链接到Travis-CI页面,以便他们可以看到测试的输出。我认为这会使面试官更加方便。 由于我非常了解这些技术,因此基本上不会增加​​分配时间。 但是,我有点担心对于一个相对简单的任务执行所有这些操作会看起来很糟糕。尽管这对我来说根本不会增加太多时间,但我不希望他们认为我花太多时间在本应简单的事情上。


6
单元和集成测试:如何成为反射
我们团队中的所有程序员都熟悉单元测试和集成测试。我们都与之合作。我们都对其进行了书面测试。我们中有些人甚至对他/她自己的代码感到更加信任。 但是,由于某种原因,编写单元/集成测试尚未成为团队任何成员的反思。当不与实际代码同时编写单元测试时,我们所有人实际上都不会感到难过。结果,我们的代码库大部分没有被单元测试发现,并且项目未经生产就进入生产。 当然,这样做的问题是,一旦您的项目投入生产并且已经正常运行,就几乎不可能获得时间和/或预算来添加单元/集成测试。 我的团队和成员自己已经熟悉了单元测试的值(1,2),但它似乎并没有帮助将单元测试到我们的工作流程自然不会。根据我的经验,强制执行单元测试和/或目标覆盖范围只会导致质量测试不佳,并且会降低团队成员的速度,这仅仅是因为没有自发产生这些测试的动力。同样,一旦压力减轻,就不再编写单元测试。 我的问题是:您是否尝试过任何方法来帮助团队内部建立动力/动力,导致人们自然地希望创建和维护这些测试?

5
使用NInject建立工厂的最佳方法是什么?
我对在MVC3中使用NInject进行依赖项注入非常满意。在MVC3应用程序中工作时,我使用NInject开发了一个自定义的Controller Creation Factory,因此所创建的任何控制器都将通过此Controller Factory注入依赖项。 现在,我开始开发Windows应用程序,我想使用应用程序范围依赖注入。即,必须通过NInject创建每个对象,以简化单元测试。请指导我确保创建的每个对象都只能通过NInject Factory。 例如,如果在Button_Click事件的任何Windows窗体上我都写: TestClass testClass = new TestClass() 并且TestClass有任何依赖,例如,ITest必须自动解决。我知道我可以使用: Ikernel kernel = new StandardKenel() //AddBinding() TestClass testClass = kenel.get<TestClass>(); 但是我发现每次要创建对象时都要执行此操作很麻烦。它还迫使开发人员以特定方式创建对象。可以做得更好吗? 我可以有一个用于对象创建的中央存储库,然后每个对象创建都会自动使用该存储库吗?

9
为继承应用程序的代码编写单元测试是否有任何价值?
显然,某些旧应用程序不能或非常难以进行单元测试,因为它是最初编写的方式。 但是在某些地方,例如一些可能经过单元测试的辅助方法,我是否应该为它们编写单元测试呢? 我的意思是,它们可以像狗一样书写,但是无论逻辑多么脆弱,时间的考验都证明了它可以按预期的方式工作。如果我说要进行重构,我应该只打扰单元测试吗?还是应该在有空的时候为它们编写单元测试? 这样做有什么价值吗? 还应考虑到方法定义可能含糊不清,我可能需要研究在给定条件下某些方法应实际执行的操作。

5
我想开始使用TDD。对初学者有什么提示吗?[关闭]
我从未在任何项目中使用过自动测试机制,但我感觉自己很想念。我想提高自己,所以我必须开始解决一些我一直这样忽略的问题,并尝试使用Git而不是坚持使用SVN。 学习TDD的好方法是什么?我可能会使用Eclipse在Java中进行编程。我听说过JUnit,但是我不知道还有什么我应该考虑的。

6
您花费多少时间进行单元测试?
在我曾经工作过的一家公司中,高管们坚持认为单元测试的代码覆盖率必须达到99%或更高。这导致编写的测试多于代码。从字面上看,我们花了3天时间为一个类编写测试,该测试花了一天的时间才能实现。 结果,我学到了很多有关TDD,测试工具,实践等方面的知识。 在我后来工作的公司中,单元测试是个未知数。这是以前有人听说过的东西。我努力地向他们介绍了单元测试的概念,但是没有效果。 现在,作为一名个体经营者,我想知道- 真正需要花多少时间进行单元测试?主要是iPhone / Android开发人员,测试中应覆盖哪些部分代码?

17
我应该要求程序员进行单元测试吗?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 我在一个我们购买大量IT项目的地方工作。我们目前正在为未来项目的需求制定系统要求标准。在此过程中,我们正在讨论是否可以要求供应商进行自动化的单元测试。 我坚信正确的自动化单元测试是记录代码质量和稳定性的唯一方法。其他人似乎都认为,单元测试是仅涉及供应商的可选方法。因此,我们将不需要自动化的单元测试,连续测试,覆盖率报告,单元测试检查或任何种类的测试。我发现这项政策非常令人沮丧。 我在这里完全不合时宜吗? 请为我提供任何观点的论据。

5
您是将私有内容内部/公开进行测试,还是使用诸如PrivateObject之类的黑客工具?
我是代码测试的初学者,assert以前是妓女。在单元测试中让我担心的一件事是,通常需要您创建public(或至少internal)private原本应该不是的字段,取消readonly它们,改为创建private方法protected virtual等。 我最近发现,可以通过使用诸如PrivateObject类之类的东西通过反射访问对象中的任何内容来避免这种情况。但是,这会使您的测试难以维护(事情将在执行而不是编译时失败,它会被简单的重命名破坏,更难调试...)。你对此的看法如何 ?关于访问限制的单元测试的最佳实践是什么? 编辑:例如,假设您有一个类,该类在磁盘上的文件中具有缓存,而在测试中您想写入内存。
26 c#  unit-testing 

4
.NET的最佳单元测试框架是什么,为什么?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 在我看来,每个人都使用NUnit甚至不考虑其他选项。我认为这是因为: 每个人都已经熟悉它,因此他们不必学习新的API。 它已经与他们的持续集成服务器一起设置为可与NUnit一起使用。 我对此有错吗? 我决定最近在自己的一个项目中使用xUnit,我喜欢它!这对我来说意义非凡,从概念上讲,这似乎是NUnit向前迈出的明确一步。 我想听听有关哪个框架实际上是最佳框架的意见-无需考虑必须学习或重新配置自动化测试。


6
Java为什么将软件包访问设置为默认访问?
我之所以问这个问题,是因为我相信他们这样做是有充分的理由的,而且根据我到目前为止的行业经验,大多数人都没有正确使用它。但是,如果我的理论是正确的,那么我不确定为什么它们包含私有访问修饰符...? 我相信,如果正确使用默认访问权限,则可以在保持封装的同时增强可测试性。并且这也使私有访问修饰符变得多余。 通过将唯一的包用于需要隐藏在世界其他地方的方法,可以使用默认访问修饰符来提供相同的效果,并且在不影响可测试性的情况下做到这一点,因为测试文件夹中的包具有相同的功能。能够访问源文件夹中声明的所有默认方法。 我相信这就是Java将包访问权限用作“默认”的原因。但我不确定为什么它们还包括私有访问权,我确定有一个有效的用例...


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.