【发布时间】:2023-04-03 13:11:01
【问题描述】:
当我第一次开始使用单元测试时,我遇到了两个问题。首先是能够测试私有方法和字段,其次是在快速开发发生时使单元测试保持最新。因此,我采用以下方法进行单元测试。
#if UNITTEST
using NUnit.Framework;
#endif
public class MyBlackMagic
{
private int DoMagic()
{
return 1;
}
#if UNITTEST
[TestFixture]
public class MyBlackMagicUnitTest
{
[TestFixtureSetUp]
public void Init()
{
log4net.Config.BasicConfigurator.Configure();
}
[Test]
public void DoMagicTest()
{
Console.WriteLine(System.Reflection.MethodBase.GetCurrentMethod().Name);
Assert.IsTrue(DoMagic() == 1, "You are not a real magician!");
}
}
#endif
}
我发现这种方法克服了我的两个问题,并且只需轻按预编译器开关即可确保所有单元测试都能编译。
我现在的问题是我正在转移到一个新项目,其中讨论的是使用单独的程序集来进行单元测试。在我深入并开始阐述如上所示的内部类方法的优点之前,我想知道是否有人认为它有任何缺点?
编辑:
只是围绕一些提到的弱点补充几点:
- 单元测试代码永远不会影响生产代码,因为 UNITTEST 预编译器标志已关闭,
- 单元测试代码不会降低主代码的可读性,因为它位于每个类的底部并包装在 Visual Studio 区域指令中,
- 我发现内部单元测试类意味着主类实际上更简单,因为没有为了测试而必须公开的额外方法或属性。在某些情况下,您迟早要在单元测试中测试某个类的某些内部状态...
【问题讨论】:
标签: c# unit-testing nunit