【问题标题】:How can I fix NUnit tests that succeed locally, but fails in Jenkins?如何修复在本地成功但在 Jenkins 中失败的 NUnit 测试?
【发布时间】:2020-10-05 20:44:48
【问题描述】:

我有一个在 Visual Studio 本地和命令行中成功的单元测试,但是当 Jenkins 构建 pull request 时它失败了。

总共有 29 个测试,但只有一个失败了,我找不到发生这种情况的原因。

测试的方法是这样的:

RuleFor(url => url).Must(url => Uri.TryCreate(url, UriKind.Absolute, out Uri uriResult))
                .OnFailure((url) => throw new CustomException($"The URL {url} provided is not a valid URL"));

单元测试:Assert.Throws<CustomException>(() => _sut.Validate("/image.png"));

错误:Expected CustomException but found null

我在 Windows 上运行 .NET Core 3.1,Jenkins 中的测试在 Docker 运行。

似乎问题在于它仅在 Windows 上成功。我在 Mac 上试过,但失败了:(

【问题讨论】:

    标签: docker unit-testing jenkins .net-core nunit


    【解决方案1】:

    过去,我遇到过与您类似的问题,这取决于运行测试的顺序以及为什么它在本地成功。

    确保您的测试不以任何方式依赖他人。

    【讨论】:

      【解决方案2】:

      我认为这不是 Jenkins 的问题。我认为这是一个测试用例问题。

      代码_sut.validate能够正确生成URI。

      我假设 Jenkins 正在内部转换为每个容器(微服务)提供的 URL 并正确解析名称。被测系统工作正常并成功创建 URL。

      请更改您的输入 URL,您的应用程序将开始抛出错误。

      【讨论】:

        【解决方案3】:

        原因是本地运行良好,因为我在 WINDOWS 上。 另一方面,Docker 正在运行一个 LINUX 容器,因此它将字符串识别为绝对本地路径。由于 Uri 还支持路径,因此测试在那里失败。由于同样的原因,它在 Mac OS 上失败了。

        我最终更改了单元测试并添加了额外的检查。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-10-07
          • 2021-06-02
          • 2015-03-26
          • 1970-01-01
          • 1970-01-01
          • 2023-03-22
          • 1970-01-01
          相关资源
          最近更新 更多