我在Visual Studio 2012测试框架中运行了一些单元测试(c ++)。
据我所知,测试是并行运行的。在这种情况下,测试是相互踩踏的 - 我不想并行运行它们!
例如,我有两个测试,其中我添加了断点,它们按以下顺序命中:
如果Test1的init首先运行,那么在启动与Test2相关的任何内容之前,它的所有测试方法都应该运行完毕!
在做了一些互联网搜索后,我感到非常困惑。我正在阅读的所有内容都是Visual Studio 2012 does not run tests concurrently by default,你必须通过箍来启用它。我们当然没有在我们的项目中启用它。
关于可能发生的事情的任何想法?我在这里遗漏了一些基本的东西吗?
答案 0 :(得分:0)
我错过了一些基本的东西吗?
是强> 您永远不应该假设另一个测试用例将按预期工作。这意味着如果测试同步或异步执行,它应该永远成为一个问题。
当然,有些测试用例需要一些基本的部分代码才能工作,这可能是您自己的代码或您使用的框架/库的一部分。说到这一点,程序员应该知道结果会产生什么样的数据或对象。
这是Mock Objects发挥作用的地方。模拟对象允许您模仿代码的一部分并确保对象提供您期望的内容,因此您不必依赖其他(耗时)服务,例如HTTP请求,文件流等。 你可以read more here。
当项目变得复杂时,设置需要相当多的行并且代码开始重复。解决方案是Setup
和TearDown
方法。命名约定不同于框架,Setup
可能被称为beforeEach
或TestInitialize
,TearDown
也可能显示为afterEach
或TestCleanup
。可以在xUnit.net codeplex page上找到NUnit,MSTest和xUnit.net的名称。
一个简单的示例应用程序:
我将如何构建和测试它:
有一个用户设置的getter / setter
测试读取方法,如果它返回所需的结果(对象,字符串或者你设计了它)
这是Test-Driven Development (TDD)的基本原则。
如果测试套件按照描述设置并且所有测试都通过,则连接在一起的所有这些部件应该完美地工作。其他测试,例如End-to-End (E2E)测试不是必需的,我只使用它们来确保整个应用程序流程正常工作并轻松捕获错误(例如http连接错误)。