如何以编程方式运行 NUnit

2024-04-01

我有一些引用 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(...) 工作的秘诀是什么?


如果你想打开一个控制台模式, add nunit-console-runner.dll参考及使用:

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

如果你想打开一个gui mode, add 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(); }
        }
    };
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何以编程方式运行 NUnit 的相关文章

随机推荐

  • 如何在 WP7 中分解 URI?

    是否有一种方法可以访问 WebBrowser 控件中的查询参数 或者我们是否必须手动分解字符串 例如 http www mysite com paramter 12345 我只需要访问参数的值 我知道在使用 xaml 页面时我们有 Quer
  • 为什么有两个类:视图模型和域模型?

    我知道使用域模型作为视图模型可能很糟糕 如果我的域模型有一个名为 IsAdmin 的属性 并且我有一个创建控制器操作来创建用户 那么有人可以更改我的表单并使其 POST IsAdmin true 表单值 即使我没有在视图中公开这样的文本字段
  • 将字符串转换为 Linq.Expressions 或使用字符串作为选择器?

    好吧 我现在有一个字符串 它具有要计算的表达式值 它有说值expr gt expr FieldName 所以我想使用这个字符串作为 Linq 表达式或任何其他查询方式 比如Select str 请帮帮我 虽然我个人没有使用过它 但动态 Li
  • 如何在分布式环境中使用 Estimator API 在 Tensorboard 中显示运行时统计信息

    本文 https www tensorflow org get started graph viz runtime statistics说明了如何将运行时统计添加到 Tensorboard run options tf RunOptions
  • Visual Studio Code:C++ 包含路径

    我目前正在使用https marketplace visualstudio com items itemName mitaki28 vscode clang https marketplace visualstudio com items
  • iOS - 并发访问内存资源

    我的应用程序从服务器 数据和数据描述符下载多个资源 这些由用户操作触发的下载可以同时执行 比如说一次最多 50 个下载 所有这些异步任务最终都会在内存中创建对象 例如 向数据结构添加叶子 例如向可变字典添加键或向数组添加对象 我的问题是 这
  • 如何通过反射忽略父接口上的事件来获取类型的事件

    我有以下代码 Type type var events type GetEvents BindingFlags DeclaredOnly BindingFlags Instance BindingFlags Public ToList 然而
  • 我什么时候必须释放内存?

    我学习了 C 现在正在学习 C 释放内存的整个意义对我来说是新的 我想知道什么时候需要担心内存释放 什么时候不需要 据我了解 我唯一需要担心内存释放的情况是当我使用new运算符 所以我应该使用释放内存delete 但在这些情况下不需要释放内
  • Conda 与 Mamba 的困惑 - 构建自定义 docker 镜像时应该使用什么

    我正在尝试使用构建自定义 Docker 映像jupyter datascience notebook这是基于jupyter base notebook 我可以看到 mamba 用于为 jupyter 安装 配置 conda 环境 下面是我的
  • 为什么此 JSONP 提要抛出“意外令牌”错误?

    我正试图抓住这个远程 JSONP 提要 http calvaryslo onthecity org plaza 2aevents 2a format json通过 jQuery 每次我尝试时 都会收到 Uncaught SyntaxErro
  • 部分类构造函数

    有没有办法让分部类的构造函数调用我的或可能未定义的另一个方法 基本上我的部分类构造函数是这样定义的 public partial class Test public Test do stuff 我希望能够以某种方式插入在调用类构造函数后运行
  • java.lang.ClassCastException:字符串无法转换为日期

    堆栈跟踪 java lang ClassCastException java lang String cannot be cast to java util Date at org hibernate type descriptor jav
  • 检查应用程序范围书签下的路径在沙盒应用程序内是否可写

    我有一个 OS X 应用程序 它存储应用程序范围的书签以持久访问某些目录 我可以毫无问题地写入这些目录 但我的代码中有一部分我想进行额外的检查以确认路径可写并且失败 var fileManager NSFileManager NSFileM
  • AVFoundation 将 Alpha 通道视频叠加在另一个视频上?

    我尝试过将图像覆盖在视频资源上 并且还认为应该有某种方法可以将 Alpha 通道视频覆盖在另一个视频上 有没有办法将 Alpha 通道视频叠加在另一个视频资源上 None
  • 奇怪的 Java HashMap 行为 - 找不到匹配的对象

    当我试图在里面寻找钥匙时 我遇到了一些奇怪的行为java util HashMap 我想我错过了一些东西 代码段基本上是 HashMap
  • 膨胀类 ImageButton 时出错

    我有一个应用程序 其中有fragment and image button关于这一点 问题是它正在上面工作5 0但不低于5 0 最小sdk版本是17 不明白这里出了什么问题 我遇到了 2 个例外 One is RuntimeExceptio
  • Checkstyle Eclipse 插件不起作用

    我正在使用 Juno Eclipse 发行版的 eclipse checkstyle 插件 每当检查代码是否有 checkstyle 错误时 我都会收到以下错误 cannot initialize module TreeWalker Una
  • 使用 Scala 进行依赖注入

    我正在寻找一种在 Scala 中进行依赖注入的方法 类似于 C 中的 Spring 或 Unity 但我没有发现任何真正有趣的东西 MacWire 我不明白这样做有什么好处 因为我们必须在wire CASS 中上课 那么如果你在调用wire
  • nginx conf 文件是什么语言?

    我想在我的 Nginx 配置文件中编写一些更复杂的条件 但我不确定语法 也找不到描述示例中基础知识之外可以做什么的文档 而且我似乎无法在Nginx 论坛或邮件列表 例如 我是否可以拥有一个unless健康 状况 所以我是 nginx 的新手
  • 如何以编程方式运行 NUnit

    我有一些引用 NUnit 的程序集并使用单个测试方法创建单个测试类 我能够获取该程序集的文件系统路径 例如 C test dll 我想以编程方式使用 NUnit 来针对该程序集运行 到目前为止我有 var runner new Simple