gpt4 book ai didi

c# - 如何以编程方式运行 NUnit

转载 作者:IT王子 更新时间:2023-10-29 04:47:54 26 4
gpt4 key购买 nike

我有一些引用 NUnit 的程序集,并使用单个测试方法创建了一个测试类。我能够获取此程序集的文件系统路径(例如“C:...\test.dll”)。我想以编程方式使用 NUnit 针对此程序集运行。

到目前为止我有:

var runner = new SimpleTestRunner();
runner.Load(path);
var result = runner.Run(NullListener.NULL);

但是,调用 runner.Load(path) 会抛出 FileNotFound 异常。我可以通过堆栈跟踪看到问题是 NUnit 在堆栈中调用 Assembly.Load(path)。如果我将路径更改为“Test, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null”之类的内容,那么我仍然会遇到相同的错误。

我已将事件处理程序添加到 AppDomain.Current.AssemblyResolve 以查看是否可以手动解析此类型,但我的处理程序从未被调用。

让 Assembly.Load(...) 工作的秘诀是什么??

最佳答案

如果您想以控制台模式打开,添加nunit-console-runner.dll引用并使用:

NUnit.ConsoleRunner.Runner.Main(new string[]
{
System.Reflection.Assembly.GetExecutingAssembly().Location,
});

如果您想以gui 模式 打开,请添加nunit-gui-runner.dll 引用并使用:

NUnit.Gui.AppEntry.Main(new string[]
{
System.Reflection.Assembly.GetExecutingAssembly().Location,
"/run"
});

这是最好的方法,因为您不必指定任何路径。

另一种选择也是将 NUnit 运行器集成到 Visual Studio 调试器输出中:

public static void Main()
{
var assembly = Assembly.GetExecutingAssembly().FullName;
new TextUI (new DebugTextWriter()).Execute(new[] { assembly, "-wait" });
}

public class DebugTextWriter : StreamWriter
{
public DebugTextWriter()
: base(new DebugOutStream(), Encoding.Unicode, 1024)
{
this.AutoFlush = true;
}

class DebugOutStream : Stream
{
public override void Write(byte[] buffer, int offset, int count)
{
Debug.Write(Encoding.Unicode.GetString(buffer, offset, count));
}

public override bool CanRead { get { return false; } }
public override bool CanSeek { get { return false; } }
public override bool CanWrite { get { return true; } }
public override void Flush() { Debug.Flush(); }
public override long Length { get { throw new InvalidOperationException(); } }
public override int Read(byte[] buffer, int offset, int count) { throw new InvalidOperationException(); }
public override long Seek(long offset, SeekOrigin origin) { throw new InvalidOperationException(); }
public override void SetLength(long value) { throw new InvalidOperationException(); }
public override long Position
{
get { throw new InvalidOperationException(); }
set { throw new InvalidOperationException(); }
}
};
}

关于c# - 如何以编程方式运行 NUnit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/195061/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com