【问题标题】:NUnit Testing with Action and Lambda使用 Action 和 Lambda 进行 NUnit 测试
【发布时间】:2016-10-13 17:45:00
【问题描述】:

我一直在阅读 MSDN 上的 Actions 和 Lambda 表达式,但我仍然缺少一些东西。我有以下公开课。

public class ExitChecker
{
    public Action EnvironmentExitAction { get; set; }

    public ExitChecker(string[] args)
    {
        if (string.Compare(args[0], "-help", true) == 0)
        {
            EnvironmentExitAction = () => Environment.Exit(0);
        }
    }
}

我有以下测试类。

[TestFixture]
public class AVSRunnerConsoleAppTests
{
    [Test]
    public void TestConsoleAppWithHelpArg()
    {
        string[] args = new string[1] { "-help" };           
        ExitChecker exitchecker = new ExitChecker(args);

        bool exitZeroOccured = false;
        exitchecker.EnvironmentExitAction = () => exitZeroOccured = true;

        Assert.That(exitZeroOccured, Is.True);
    }
}

我试图在没有实际调用 Environment.Exit 的情况下测试 Environment.Exit。一切似乎都可以编译和运行,但我似乎无法将 Lambda 表达式中的 exitZeroOccured 更改为 true。有人可以指出我正确的方向吗?

【问题讨论】:

    标签: c# testing lambda nunit action


    【解决方案1】:

    你永远不会调用EnvironmentExitAction。将您的代码更改为:

    [Test]
    public void TestConsoleAppWithHelpArg()
    {
        string[] args = new string[1] { "-help" };
        ExitChecker exitchecker = new ExitChecker(args);
    
        bool exitZeroOccured = false;
        exitchecker.EnvironmentExitAction = () => exitZeroOccured = true;
    
        exitchecker.EnvironmentExitAction.Invoke();
    
        Assert.That(exitZeroOccured, Is.True);
    }
    

    【讨论】:

    • 哇。我不敢相信我错过了。去做更多的阅读然后......谢谢一堆。我实际上认为 Invoke 发生在 Lambda 表达式本身中。
    • 噗,别担心...我一直都这样做。虽然,老实说,你的测试并没有真正做任何事情。您只是在测试调用 Action 是否有效,这显然是因为它是一个 .NET 类。您永远不会调用您的 Environment.Exit(0); 代码,因为整个测试代码都驻留在测试本身中。
    • 哈!真的。我一直在尝试一些不同的测试选项。 Environment.Exit(0) 终止了测试,它可能不是应该测试的东西,但我想我会试一试。
    猜你喜欢
    • 2018-08-23
    • 2011-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-06
    • 1970-01-01
    • 1970-01-01
    • 2018-10-20
    相关资源
    最近更新 更多