如果您已经编写了应用程序,根据某些人的说法,您现在将使用“遗留代码”(基于 Michael Feather 的书有效地使用遗留代码 - 通过“遗留代码”羽毛表示任何不是被单元测试充分覆盖)。
正如@bAN 所提到的,您必须做很多工作来隔离您将调用的方法,方法是使用可以替换为 "stubs" 的 工厂方法 > 使用接口或使用override。如果没有这个,您将进行集成测试(因为您还将测试不同功能原子之间的集成)。但是,在几乎所有情况下,测试方法与生产方法的 1:1 比例并不能提供足够的覆盖率。
根据您的 Visual Studio 版本,测试工具的数量会有所不同。 NUnit 是一个非常流行的测试框架:http://www.nunit.org/,如果您不使用 Visual Studio 工具。
要进行测试,您可以:
创建一个名为 YourProjectUnderTestName.Tests.Unit 的类型为 Test Project 的新项目。
您将看到测试类具有属性[TestClass],而测试方法具有属性[TestMethod]。
您还必须查看Assert 类及其静态方法http://msdn.microsoft.com/en-us/library/ms182530.aspx
您应该在测试中遵循 Arrange、Act、Assert 模式。获取运行要单独测试的代码所需的一切,然后运行被测代码,然后使用 Asserts 针对预期行为进行测试。
您有时还需要了解 [SetUp]/[TearDown] 方法(在 MSUnit 中),这些方法具有以下属性:
[ClassInitialize()]、[TestInitialize()] 和
[TestCleanup()], [ClassCleanup()]
ClassInitialize 在任何测试开始之前运行,TestInitialize 在班级中的每个测试之前运行,TestCleanup 在班级中的每个测试之后运行,ClassCleanup 在所有测试完成后运行。
正如@bAN 所说,浏览http://artofunittesting.com/ 网站并认真考虑购买这本书。如果办公室着火了,我会拿它和 Code Complete 一起拿。
正如@bAN 和@Oliver Hanappi 所提到的,TDD 是确保您进行“正确”单元测试并获得良好覆盖率的一种非常好的方法。
祝你好运!