Questions tagged «unit-testing»

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

9
不编写单元测试是合理的,因为它们往往会在以后被注释掉,或者因为集成测试更有价值?
我正在与一位同事讨论单元/集成测试,他提出了一个有趣的案例来反对编写单元测试。我是大型单元测试(主要是JUnit)的支持者,但是我很想听听其他人的看法,因为他提出了一些有趣的观点。 总结他的观点: 当发生重大代码更改时(新的POJO集,主要应用程序重构等),单元测试往往被注释掉而不是重新编写。 最好将时间花在涉及用例的集成测试上,这会使范围较小的测试变得不那么重要。 有这个想法吗?尽管集成测试听起来至少有价值,但我仍在进行单元测试(因为我一直认为它会产生改进的代码)。

4
为每个新错误添加一个单元测试
在我的工作中,所有解决错误的开发人员都必须添加一个新的单元测试,以警告此类错误(如果再次出现这种情况)。如果无法进行单元测试(例如,网页设计问题),则质量检查部门必须创建一个测试用例以手动检查它。 其背后的想法是,如果在产品发布之前未检测到缺陷,是因为没有适当的单元测试来检测它。因此,开发人员必须添加它。 问题是:这在任何软件开发方法中都常见吗?这个技术有名字吗?我想了解更多有关它的信息,但是我需要一些信息来开始它。

5
调用相同类中其他方法的单元测试方法的最佳方法
我最近正在和一些朋友讨论以下两种方法中哪一种最适合从同一个类中的方法中返回结果或调用同一个类中的方法。 这是一个非常简化的示例。实际上,功能要复杂得多。 例: public class MyClass { public bool FunctionA() { return FunctionB() % 2 == 0; } protected int FunctionB() { return new Random().Next(); } } 因此,要测试这一点,我们有2种方法。 方法1:使用函数和操作来替换方法的功能。例: public class MyClass { public Func<int> FunctionB { get; set; } public MyClass() { FunctionB = FunctionBImpl; } public bool FunctionA() …

6
是否应该对复杂的正则表达式进行单元测试?
我应该在应用程序中为复杂的正则表达式编写单元测试吗? 一方面:它们易于测试,因为输入和输出格式通常很简单且定义明确,而且它们往往变得如此复杂,因此对它们的测试特别有价值。 另一方面:它们本身很少是某个单元界面的一部分。最好只测试接口,然后以隐式测试正则表达式的方式进行操作。 编辑: 我同意布朗博士的意见,他在评论中指出这是内部组件单元测试的特例。 但是正则表达式作为内部组件具有一些特殊特征: 没有真正的单独模块,单行正则表达式可能非常复杂。 正则表达式将输入映射到输出而没有任何副作用,因此真正易于单独测试。

3
在ASP.NET MVC中对控制器进行单元测试是否有真正的价值?
我希望这个问题能提供一些有趣的答案,因为这是困扰我一段时间的问题。 在ASP.NET MVC中对控制器进行单元测试是否有真正的价值? 我的意思是,在大多数情况下(而且我不是天才),我的控制器方法即使在最复杂的情​​况下也是如此: public ActionResult Create(MyModel model) { // start error list var errors = new List<string>(); // check model state based on data annotations if(ModelState.IsValid) { // call a service method if(this._myService.CreateNew(model, Request.UserHostAddress, ref errors)) { // all is well, data is saved, // so tell the user …

9
在编写单元测试之前编写代码有什么缺点?
我一直看到建议,我们应该首先编写单元测试,然后再开始编写代码。但是我觉得(对我来说)走另一条路要舒适得多-编写代码,然后进行单元测试,因为在编写实际代码后,我觉得我们更加清楚了。如果我先编写代码然后进行测试,那么即使我将精力集中在创建可测试的设计上,也可能需要稍稍更改一下代码以使其可测试。另一方面,如果我先编写测试,然后编写代码,则当代码成形时,测试将非常频繁地更改。 正如我看到的有关开始编写测试然后继续进行编码的大量建议一样,如果我以其他方式进行编写,然后编写单元测试,则有什么缺点呢?

5
您是否应该在所有单元测试中对数据进行硬编码?
那里的大多数单元测试教程/示例通常涉及为每个单独的测试定义要测试的数据。我猜这是“一切都应该隔离测试”理论的一部分。 但是我发现,当处理具有大量DI的多层应用程序时,设置每个测试所需的代码将花费很长的时间。取而代之,我建立了许多测试库类,现在可以继承这些类,其中已经预先构建了许多测试框架。 作为此过程的一部分,我还将构建代表运行中的应用程序数据库的伪数据集,尽管每个“表”中通常只有一两行。 是否预先定义(如果不是全部)所有单元测试中的大多数测试数据,这是公认的做法吗? 更新资料 从下面的评论中,确实感觉到我在进行比单元测试更多的集成。 我当前的项目是ASP.NET MVC,它使用实体框架代码优先的工作单元和Moq进行测试。我已经模拟了UoW和存储库,但是我正在使用真实的业务逻辑类,并测试控制器操作。测试通常会检查UoW是否已提交,例如: [TestClass] public class SetupControllerTests : SetupControllerTestBase { [TestMethod] public void UserInvite_ExistingUser_DoesntInsertNewUser() { // Arrange var model = new Mandy.App.Models.Setup.UserInvite() { Email = userData.First().Email }; // Act setupController.UserInvite(model); // Assert mockUserSet.Verify(m => m.Add(It.IsAny<UserProfile>()), Times.Never); mockUnitOfWork.Verify(m => m.Commit(), Times.Once); } } SetupControllerTestBase正在构建模拟单元,并实例化userLogic。 许多测试需要在数据库中拥有现有用户或产品,因此在此示例中userData,我已经预先填充了模拟UoW返回的内容,它只是一个IList<User>用户记录。

2
如何自动生成Guava单元测试?
番石榴具有自动生成的单元测试用例: 番石榴的单元测试数量惊人:截至2012年7月,番石榴测试包包括286,000多个单独的测试用例。其中大多数都是自动生成的,而不是手工编写的,但是Guava的测试覆盖面非常全面,尤其是对于com.google.common.collect。 它们是如何产生的?使用了哪些技术和技术来设计和生成它们?

6
如何解释单元测试的价值
我想向我的同事介绍单元测试(和一般测试)的概念;现在根本没有测试,通过UI实际执行任务以查看期望的结果来测试事物。就像您想象的那样,代码与确切的实现紧密耦合-甚至导致代码应该放在一个类中并在整个系统中重复使用,并且跨方法进行复制和粘贴。 由于需求的变化,我被要求修改我先前编写的模块,该模块相当松散地耦合在一起(虽然不尽如人意,但在无需引入许多其他概念的情况下,我可以做到最好)。我决定在修订后的代码中包含一套单元测试,以“证明”它可以按预期工作,并演示测试的工作方式。我没有遵循真正的TDD,因为已经编写了一些代码,但是我希望遵循一些TDD概念来创建新代码。 现在,我不可避免地会被问到,为什么要花我一两天以上的时间来编写代码,因为我要与之交互的部分已经存在于系统中(尽管没有任何测试并且非常紧密耦合),当我检查其中的代码时,系统将询问我这个“测试”项目是什么。我可以解释测试的基础知识,但是我无法以其他人会理解的方式解释实际好处(因为他们认为测试需要您自己运行应用程序,因为通常实际的UI在确定功能是否“有效”时很重要“ 或不)。他们不理解松散耦合的思想(显然没有松散耦合的事实;在我编写的代码之外甚至没有任何接口),因此尝试将其用作收益可能会给我带来“恩?” 外观,再也不必放松一些现有模块,并可能引入某种IoC容器,这就像浪费时间,而不是“编程”。 有人对我如何指向此代码有任何建议,并说“我们应该开始创建单元测试”而不会屈服于任何一个居高临下的条件(例如,“编写测试会迫使您编写良好的代码。”这可能意味着代码除非是我的坏人),还是没有浪费时间却没有增加任何实际价值?

5
测试驱动的开发-说服我![关闭]
我知道有些人大力支持测试驱动的开发。我过去曾使用过单元测试,但仅用于测试可以轻松测试的操作,或者我认为很可能是正确的操作。完整或接近完整的代码覆盖范围听起来会花费很多时间。 您将测试驱动的开发用于哪些项目?您是否仅将其用于特定大小以上的项目? 我是否应该使用它?说服我!

6
单元测试的预期结果应该硬编码吗?
单元测试的预期结果应该硬编码还是可以依赖于初始化变量?硬编码或计算结果是否增加了在单元测试中引入错误的风险?我还没有考虑其他因素吗? 例如,这两种格式中哪一种是更可靠的格式? [TestMethod] public void GetPath_Hardcoded() { MyClass target = new MyClass("fields", "that later", "determine", "a folder"); string expected = "C:\\Output Folder\\fields\\that later\\determine\\a folder"; string actual = target.GetPath(); Assert.AreEqual(expected, actual, "GetPath should return a full directory path based on its fields."); } [TestMethod] public void GetPath_Softcoded() { MyClass target = …
29 c#  unit-testing 

4
单元测试新手的单元测试最佳实践
近年来,我只为大型项目或小型工具中的人员编写了小型组件。我从来没有编写过单元测试,而且似乎总是像学习如何编写它们并实际上使一个人测试花费了很多时间,而不是简单地启动程序并进行真实测试。 我将要开始一个相当大的项目,该项目可能需要几个月的时间才能完成,尽管我会像往常一样尝试在编写元素时对其进行测试,但是我想知道单元测试是否可以节省时间。 我只是想知道是否有人可以提供很好的建议: 我是否应该在项目开始时就进行单元测试,并可能采用TDD方法。 在完成每个部分后,我是否应该随身编写测试? 我应该完成项目,然后最后编写单元测试。

7
自动化的单元测试,集成测试或验收测试
目前,TDD和单元测试似乎很受欢迎。但是,与其他形式的自动化测试相比,它真的有用吗? 凭直觉,我猜想自动化集成测试比单元测试有用。以我的经验,大多数错误似乎都在于模块之间的交互,而不是每个单元的实际(通常是有限的)逻辑。此外,由于模块之间的接口发生更改(以及更改的前后条件),经常发生回归。 我是在误解什么,还是与集成测试相比,单元测试为什么会引起更多关注?仅仅是因为假设您已经拥有集成测试,而单元测试又是我们需要学习以开发人员身份应用的下一件事? 还是与自动化的复杂性相比,单元测试仅能带来最高的收益? 您在自动化的单元测试,自动化的集成测试和自动化的验收测试中有什么经验,而在您的经验中,哪些产生了最高的投资回报率?为什么? 如果您只需要选择一种测试形式就可以在下一个项目中实现自动化,那会是什么? 提前致谢。

8
方法:为另一个开发人员编写单元测试
我当时在考虑软件开发和编写单元测试。我有以下想法: 假设我们有一对开发人员。每对负责一部分代码。一对中的一个实现了一个功能(编写代码),第二个为此编写了单元测试。测试是在代码之后编写的。以我的想法,他们互相帮助,但工作却分开。理想情况下,它们将处理两个相似大小的功能,然后交换以进行测试准备。 我认为这个想法有一些好处: 测试是由某人编写的,可以看到更多有关实施的信息, 工作应该比配对编程要快一些(同时具有两个功能), 测试和代码都有负责的人, 代码至少要经过两个人的测试,并且 也许搜索正在测试您的代码的人编写的代码中的错误将为编写更好的代码和避免偷偷摸摸的行为提供特殊动机。 在代码和测试开发之间添加另一个开发人员进行代码审查也许也是个好主意。 这个想法有什么弊端?它已经被描述为某种未知的方法论并用于软件开发吗? PS。我不是专业的项目经理,但是我对项目开发流程有所了解,并且知道一些最受欢迎的方法-但是这个想法对我来说并不熟悉。

6
没有TDD的单元测试感
我们有一个新的(相当大的)项目正在启动,我们计划使用TDD进行开发。 TDD的想法失败了(有很多业务和非业务原因),但是现在我们正在进行对话-是否应该编写单元测试。我的朋友说,在没有TDD的情况下编写单元测试没有任何意义(或几乎为零),我们应该只关注集成测试。我相信相反,编写简单的单元测试仍然有一定的道理,只是为了使代码更可靠。你怎么看? 补充:我认为这不是>> thisquest <<的重复-我了解UT和TDD之间的区别。我的问题不是关于差异,而是关于编写没有TDD的单元测试的感觉。
28 unit-testing  tdd 

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.