我有一个单元测试,在Visual Studio和命令行中都能在本地成功,但在Jenkins构建时却失败了。拉动请求.
一共有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核心 3.1的Windows上,而Jenkins中的测试是在 Docker.
似乎问题是它只在Windows上成功。我在Mac上试过,但失败了 :(
过去,我也遇到过和你类似的问题,这要归结于测试运行的顺序,为什么会在本地成功。
确保你的测试不以任何方式依赖他人。
我认为这不是Jenkins的问题。我认为这是一个测试用例的问题。
代码 _sut.validate
能够正确生成URI。
我假设Jenkins正在内部转换为每个容器(微服务)提供的URL,并正确解析名称。测试中的系统工作正常,并成功创建URL。
请更改您的输入URL,您的应用程序将开始抛出错误。
原因是本地工作正常,因为我是在windows.在docker中,容器不是windows容器,所以它把字符串识别为绝对的local PATH,因为Uri也支持路径。
最后我修改了单元测试,并增加了一个额外的检查。