如何修复在本地成功但在 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 上失败了。
我最终更改了单元测试并添加了额外的检查。
我有一个单元测试在 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 上失败了。
我最终更改了单元测试并添加了额外的检查。