如何在代码中告诉我们是否从testmethod .net测试运行

fea*_*net 5 .net c# testing

有没有办法知道何时从运行测试方法调用代码?

bool MyMethod()
{
    if ( /* are we running a test? */ )
    {
        return true; // otherwise this will fail from the automated build script
    }
    else
    {
        // run the proper code
    } 
}
Run Code Online (Sandbox Code Playgroud)

请饶恕我"这是一个非常糟糕的主意"评论:)

LBu*_*kin 6

你认识到这可能是一个坏主意,但你可能不知道其他选择.您应该研究一下模拟框架 - 它们可以提供一种在单元测试中在运行时将替代实现注入代码的方法.这是一种既定的做法,允许代码在测试和生产中表现不同.

关于主要问题.

这取决于您使用的单元测试框架.我不知道NUnit中的特定功能(例如)报告您正在测试中.其他框架(如MS Test)可能很好地提供了这一点.但是,你自己很容易做到.

如果您绑定到源代码,只需使用#define指令有条件地定义一些可以分支的变量.

如果您绑定到库,我建议您创建自己的类,用于跟踪您是在单元测试还是实际代码中,并在TestFixture设置方法中设置该类以指示您正在运行测试.您也可以使用它Environment.SetEnvironmentVariable作为避免编写特殊类的方法.