如何修复在本地成功但在 Jenkins 中失败的 NUnit 测试?

How can I fix NUnit tests that succeed locally, but fails in Jenkins?

我有一个单元测试在 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

我是运行.NET Core 3.1 on Windows and the tests in Jenkins are running in Docker

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

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

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

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

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

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

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

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

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