NUnit自定义命令不调用Execute()

NUnit自定义命令不调用Execute(),nunit,Nunit,我已经基于with创建了一个自定义NUnit属性,但是做了一些小调整,基本上只返回一个自定义命令。该命令派生自DelegatingTestCommand并重写Execute,但似乎没有调用Execute。我正在输出到测试上下文,但从未看到输出。缩小代码示例: public class PrintingCommand : DelegatingTestCommand { public PrintingCommand( TestCommand innerCommand ) :

我已经基于with创建了一个自定义NUnit属性,但是做了一些小调整,基本上只返回一个自定义命令。该命令派生自DelegatingTestCommand并重写Execute,但似乎没有调用Execute。我正在输出到测试上下文,但从未看到输出。缩小代码示例:

public class PrintingCommand : DelegatingTestCommand
{
    public PrintingCommand( TestCommand innerCommand )
        : base(innerCommand){}

    public override TestResult Execute( TestExecutionContext context )
    {
        context.OutWriter.WriteLine( "Hello output" );
        return context.CurrentResult;
    }
}


[AttributeUsage( AttributeTargets.Method )]
public class PrintingAttribute : Attribute, IWrapSetUpTearDown
{
    public TestCommand Wrap( TestCommand command )
    {
        return new PrintingCommand( command );
    }
}
当我用[Printing]装饰测试时,我从来没有看到Hello输出被写入任何地方

这是一个很小的例子,实际上我在博客中做重试的事情,而不是被调用/完成wither

你知道为什么吗


我在命令行中使用NUnit 3&console runner。

您的命令从不调用内部命令。因此,永远不会完成任何测试执行。请查看NUnit自己的maxtime命令的源代码,了解如何执行该命令。请注意,您可以在调用innerCommand.Execute之前和之后在代码中执行操作


阅读了这些评论后,我意识到您的示例可能与您正在做的并不完全匹配,但您知道,我们实际上只能为您提供有关您向我们展示的代码的答案

我猜你打字打错了,你实际上是在用[自定义]而不是[打印]来装饰你的测试?@Chris gah,错过了!已更正属性的名称。是否可以复制实际运行的内容?这肯定是缺少了一些位,因为它无法编译,例如Execute不返回任何东西-但我看不出这里有什么明显的错误。还有可能是您正在运行的一个示例测试?@Chris这只是一个微不足道的简化示例,我的代码与那篇博客文章非常相似,唯一的例外是我传入了一个在失败情况下运行的操作,然后创建了派生属性,这些属性传入了它们自己的操作。我运行的测试是验收测试,它们使用Selenium来测试UI,但我在任何情况下都看不到输出。现在,我已经为这个示例添加了正确的返回-基本上只是一个代理,但我希望看到输出以了解它是否真的在运行。