Questions tagged «unit-testing»

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

2
您如何对JavaScript进行单元测试
我花了很多时间来研究JavaScript。我还没有找到一种似乎可以很好地测试javascript的方法。过去,这对我来说不是问题,因为我工作的大多数网站都包含很少的JavaScript。我现在有一个新网站,该网站广泛使用jQuery,我想为大多数系统构建单元测试。 我的问题是这个。 大多数功能都会以某种方式更改DOM。 大多数功能也需要从Web服务器请求数据,并且需要在服务上进行会话以获取结果。 我想从命令行或测试运行工具而不是浏览器中运行测试。 我应该阅读的任何帮助或文章将对您有所帮助。

1
使用遗留代码时,单元测试生成器是否对您有所帮助?
我正在研究一个测试覆盖率非常低的小型C#(。NET 4.0,某些Silverlight)(约70kLOC,包括生成的)。该代码本身的工作方式是通过了用户接受性测试,但是它很脆弱,并且在某些方面没有很好的考虑。我想使用常见的疑问(NMock,NUnit,StatLight表示Silverlight位)在旧代码周围添加可靠的单元测试范围。 我通常的方法是开始进行项目,单元测试和重构,直到对代码状态感到满意为止。我过去已经做过很多次了,而且效果很好。 但是,这次我正在考虑使用测试生成器(尤其是Pex)创建测试框架,然后手动对其进行充实。 我的问题是:过去在遗留代码库上开始工作时是否使用过单元测试生成器?如果是,您会推荐它们吗? 我担心的是,生成的测试将错过代码库的语义细微差别,导致可怕的情况是出于覆盖率指标而进行测试,而不是清楚地表达代码中预期行为的测试。

2
什么是“断言框架”?
当我发现js-test-driver单元测试框架时,我发现该框架背后的人打算将其与断言框架集成。什么是断言框架?它是一种单元测试框架吗?如果是这样的话,那么这些框架有什么具体特点?

2
如何对应用程序和UI代码进行单元测试?
我喜欢编写单元测试,并同意它们是测试代码,防止回归等的绝佳方法。但是,我发现自己无法编写它们,因为我日复一日地工作的绝大多数代码都是应用程序向用户显示UI的代码。是否有对应用程序代码进行单元测试的好方法?这里的最佳做法是什么? 我不是在寻找诸如框架之类的具体答案。而是,总的来说,您如何解决这个问题?

3
在底层组件上进行TDD是个好主意吗?
我正在考虑编写低级驱动程序或OS组件/内核。 该osdev.org人们似乎认为重要的位没有有意义的可测试这种方式,但我看过一些讨论,有人认为是不同的。我环顾四周,但未能在低级组件上找到任何TDD的实际示例。 这是人们实际上在做的事情,还是人们在理论上谈论的事情,因为在实践中没有好的方法?

3
单元测试,是在框架之前还是之后编写它们?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 这是我在这里的第一个问题,因此我将简短地说明。 在编写单元测试时,应该在为它们创建基础框架之前还是之后编写它们?这是我的首席执行官和总裁之间进行的一次讨论,我希望您对此发表意见。 就个人而言,我总是先编写代码,然后编写单元测试,但是您呢?

1
由单行功能组成的数据处理管道的单元测试
在阅读Mary Rose Cook的《函数式编程实用入门》时,她以反模式为例。 def format_bands(bands): for band in bands: band['country'] = 'Canada' band['name'] = band['name'].replace('.', '') band['name'] = band['name'].title() 以来 该功能不只是一件事 名称不是描述性的 它有副作用 作为建议的解决方案,她建议通过管道传递匿名函数 pipeline_each(bands, [call(lambda x: 'Canada', 'country'), call(lambda x: x.replace('.', ''), 'name'), call(str.title, 'name')]) 但是,在我看来,这具有无法测试的缺点。至少format_bands可以进行单元测试以检查它是否符合预期,但是如何测试管道?还是说匿名函数如此不言自明以至于不需要对其进行测试? 我为此的实际应用程序是尝试使我的pandas代码更具功能性。我经常会在“ munging”函数中使用某种管道” def munge_data(df) df['name'] = df['name'].str.lower() df = df.drop_duplicates() return df 或以管道样式重写: …

2
如何对启发式算法进行单元测试?
假设我们有路线查找算法: def myHeuristicTSP(graph): /*implementation*/ return route 现在我们要对此进行单元测试: class TestMyHeuristicTSP: def testNullGraphRaiseValueError(self): self.assertRaises(ValueError, myHueristicTSP(None)) def testSimpleTwoNodeGraphReturnsRoute: self.assertEquals(expectedResult, myHeuristicTSP(input)) 问题是,对于非启发式TSP算法,我们可以给出各种图形,并检查它们是否始终返回绝对最短的路线。 但是因为启发式算法虽然仍然是确定性的,但它的可预测性较差,仅是为了了解该算法的工作原理并找到那些极端情况?

4
重构-只要所有测试都通过,简单地重写代码是否合适?
我最近看了RailsConf 2014的“ All Little Little”。在这次演讲中,Sandi Metz重构了一个包含大型嵌套if语句的函数: def tick if @name != 'Aged Brie' && @name != 'Backstage passes to a TAFKAL80ETC concert' if @quality > 0 if @name != 'Sulfuras, Hand of Ragnaros' @quality -= 1 end end else ... end ... end 第一步是将函数分解为几个较小的函数: def tick case name when 'Aged …

3
是否手动编写单元测试示例验证?
我们知道编写JUnit测试可以演示代码中的一条特定路径。 我的一位同事评论说: 手动编写单元测试是“ 通过示例证明”。 他来自具有诸如Quickcheck之类的工具的Haskell的背景,并且具有推理类型程序行为的能力。 他的意思是,此方法未尝试使用许多其他输入组合,而您的代码并未经过测试。 我的问题是:手动编写单元测试示例验证吗?

6
单元测试应仅涵盖“功能性”软件
我们正在一个新的软件开发项目中使用StructureMap。团队成员之一已实现了一个单元测试,该单元测试基本上测试了StructureMap容器配置。它通过执行以下操作来做到这一点; 计算为应用程序名称空间中的类配置的程序集的实例数。 在类级别定义期望的实例 断言预期实例与找到的实例总数匹配。 断言预期实例与测试中定义的实例匹配 一个例子是; var repositories = container.GetAllInstances<IEnvironmentRepository>(); Assert.AreEqual(1, repositories .Count()); foundInstances = foundInstances + repositories .Count(); 我们还为下一节课提供“单元测试”; public MyClass(IEnvironmentRepository environmentRepository) { } 在这些测试中,我们模拟了IEnvironmentRepository,因此不会像在实时系统中那样从容器中注入它。 一位同事忽略了对结构图配置的单元测试,并带有“单元测试仅测试它自己的配置”的注释。这显然是测试的目的,我认为这是完全正确的。我要求忽略测试的人删除结构映射配置IEnvironmentRepository(仍然忽略测试)并运行完整的单元测试套件,它们都通过了。然后,我们运行了该应用程序,由于容器配置现在无效,因此该应用程序崩溃了。我认为,这证明了测试的价值,我的同事仍然不同意。他只是简单地说我们不应该测试配置,但是我认为这完全可以进行单元测试。 有很多问题; 这是有效的单元测试吗?-我们正在测试容器的配置,而不是结构图起作用(但我可以看到重叠的部分) 如果不是,您如何在不测试的情况下验证配置。您如何阻止某人意外删除所需的代码行并将其检入? MyClass单元测试是否应该IEnvironmentRepository从容器中解析出实例并传递给它?

1
如何管理项目中的非单元测试?
我在我的项目中亲自调用tests了一些不是单元测试的代码。它们旨在运行,并且结果必须由人工评估。我这样做是因为我正在制造物理引擎,并且在开发过程中,我需要查看自己在做什么。所以我simulation在测试模块中做了一个包装。从技术上讲,这是单元测试,因为模拟使用的是单元测试库,但我并不是要像实际的单元测试一样运行它们。 我想做的是将那些特殊测试与单元测试区分开来,因为我想轻松地运行所有单元测试。我认为这有点像功能测试。您是否遇到过必须为功能测试准备应用程序的情况?功能测试准备(基本上是我的模拟测试)应该放在项目中的什么位置,以及如何将它们与单元测试区分开来? 我在Java中,因此我可以将所有方法签名从更改为@Test public void myNamedTest(),public static void main(String[] args)但是使用仿真对我来说既费力又不实用。 我junit在一个gradle项目中使用。gradle欢迎使用创建特殊测试文件夹的任何解决方案。

2
我可以在单元测试中检查注释的存在吗?
我有一个由抽象类及其N个扩展组成的Java类层次结构。在抽象类中,我有一个使用@Remove注释进行注释的方法。尽管删除该批注不会导致任何异常,但不会很快失败,但是我们可能会遇到内存异常,因此,我想确保如果此批注在某些重构中消失,我们会尽快注意到。 我正在尝试创建GUTS(好的单元测试),因此我认为我可以在测试中记录该“技术要求”,并附带说明其的测试用例。 但这不是功能,它是实现的详细信息,并且没有与方法的行为链接(该方法可以为空,但是必须存在并且必须进行注释)。 是否可以为此创建测试,还是有其他方法可以检查此批注的存在?

1
测试单元与集成之间的差距:小型,组件,单元集成测试中的集成
在过去的几周中,我一直在研究和研究如何填补我们的测试方法中的空白。简而言之,单元测试太小,而传统的集成测试太大。 经常出现的情况是A,B两者都使用component C。但是A,B对的要求略有不同,并且对做出略有不同的假设C。如果我是A如何以及在哪里测试我的假设的开发人员C? 显然,A带有模拟假设的单元测试C可以很好地进行A隔离测试,但是它不能测试假设本身。 另一种可能性是为添加单元测试C。但是,这不是理想的,因为A在开发过程中,C根据不断变化的假设更改测试A将非常笨拙。确实,A开发人员甚至可能没有足够的权限访问C(例如,外部库)的单元测试。 用一个更具体的例子来说明这一点:假设这是一个节点应用程序。 A,并B依赖于C读取文件(以及其他内容)并将文件内容存储在传递给的对象中C。最初,所有C处理的文件都很小,可以同步读取而不会产生明显的阻塞。但是,的开发人员B意识到他的文件越来越大,需要切换C到异步读取。这会导致中出现零星的同步错误A,该错误仍假定C是正在同步读取文件。 众所周知,这种错误很难从完整的集成测试中找到,并且根本不会在集成测试中发现。它也不受As单元测试的影响,因为As的假设是模拟的。但是,可以通过“ just” A和“ C。”行使的“迷你”集成测试轻松抓住它。 我只找到了关于这种测试的一些参考。小型集成,组件集成测试,单元集成测试。它还与BDD测试的方向有关,而不是正式的TDD单元测试。 如何填补这个测试空白?具体来说-我应该在哪里进行此类测试?如何嘲笑的投入A,并C为“迷你型”集成测试?在分离这些测试和单元测试之间的测试关注点上应该付出多少努力?还是有更好的方法来填补测试空白?

2
在执行DDD时是否应该模拟实体和值对象?
阅读后几 文章约Newable VS 注射对象以及如何将这些概念涉及到DDD的服务,实体和值对象,我留下了有关使用我的代码newables尤其是在我的单元测试的一些疑虑。 可更新项的主要候选对象是Entities和Value对象,这意味着与其将这些依赖项注入其他对象中,还应该只是new这些对象的一个​​实例,并直接在代码中使用它们。 但是,良好的DDD做法主张将责任分配给实体和价值对象(如果认为合适的话)。因此,实体和价值对象将最终在其中包含一些严肃的业务逻辑。 现在,如果服务在实体或值对象上运行,我应该模拟该实体或值对象并将该模拟传递给该服务(模拟将要求interface对似乎被提倡的价值对象或实体使用)? 还是我应该只是new一个实体/值对象,并将具体实现传递给服务,从而违反仅测试一个单元的单元测试原理?

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.