没有单元测试的工程就不是好工程, 至少不是大工程. 在 Visual Studio 里可以很方便的进行单元测试的创建和运行. 下面的教程是基于C#但是也可以很容易的应用到其它语言,比如 C++.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | // Example: How to Create Unit Tests // helloacm.com using System; namespace ClassLibrary1 { public class Class1 { public int GetEven() { return new Random().Next()*2; } } } |
// Example: How to Create Unit Tests // helloacm.com using System; namespace ClassLibrary1 { public class Class1 { public int GetEven() { return new Random().Next()*2; } } }
在这个简单的类里, 我们有一个方法 GetEven() 用来返回随机的一个偶数, 我们可以通过新工程向导, 来创建一个测试工程.
我们需要在同一的项目树里把两个工程都包括进来 (这样就可以方便项目之间进行引用).
我们接着需要完成 [UnitTest1.cs], 把 TestMethod1 测试代码填完整:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | using ClassLibrary1; using Microsoft.VisualStudio.TestTools.UnitTesting; // Example: How to Create Unit Tests // helloacm.com namespace UnitTestProject1 { [TestClass] public class UnitTest1 { [TestMethod] public void TestMethod1() { Assert.IsTrue(new Class1().GetEven() % 2 == 0); } } } |
using ClassLibrary1; using Microsoft.VisualStudio.TestTools.UnitTesting; // Example: How to Create Unit Tests // helloacm.com namespace UnitTestProject1 { [TestClass] public class UnitTest1 { [TestMethod] public void TestMethod1() { Assert.IsTrue(new Class1().GetEven() % 2 == 0); } } }
当然, 我们需要在 [UnitTestProject1] 里添加对 [ClassLibrary1] 的引用, using ClassLibrary1. 然后我们就可以通过断言 Assert来检查GetEven 方法是否返回偶数(这个需要开发人员自己写).
然后在 Visual Studio 的菜单选择 “Test” — “Run” — “All Tests” or (Ctrl + R, A) 这样就会自动寻找所有测试用例并进行测试.
为了说明, 我们把 Assert 的判断逻辑改反:
Assert.IsTrue(new Class1().GetEven() % 2 == 1);
重新进行单元测试, 这样可以看到系统说失败:
Resharper 插件有一个功能更加多的单元测试窗口:
当然, 可以通过命令行 mstest.exe 在 Continuous Integration 服务器上对所编译的代码进行单元测试:
mstest.exe /testcontainer:UnitTestProject1.dll /resultsfile:res.trx
英文同步: https://helloacm.com/how-to-create-and-run-unit-tests-in-c-net-a-quick-tutorial/
强烈推荐
- 英国代购-畅购英伦
- TopCashBack 返现 (英国购物必备, 积少成多, 我2年来一共得了3000多英镑)
- Quidco 返现 (也是很不错的英国返现网站, 返现率高)
- 注册就送10美元, 免费使用2个月的 DigitalOcean 云主机(性价比超高, 每月只需5美元)
- 注册就送10美元, 免费使用4个月的 Vultr 云主机(性价比超高, 每月只需2.5美元)
- 注册就送10美元, 免费使用2个月的 阿里 云主机(性价比超高, 每月只需4.5美元)
- 注册就送20美元, 免费使用4个月的 Linode 云主机(性价比超高, 每月只需5美元) (折扣码: PodCastInit2022)
- PlusNet 英国光纤(超快, 超划算! 用户名 doctorlai)
- 刷了美国运通信用卡一年得到的积分 换了 485英镑
- 注册就送50英镑 – 英国最便宜最划算的电气提供商
- 能把比特币莱特币变现的银行卡! 不需要手续费就可以把虚拟货币法币兑换
微信公众号: 小赖子的英国生活和资讯 JustYYUK