我有一个单元测试在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上尝试过,但是失败:(
答案 0 :(得分:0)
过去,我遇到了一个与您类似的问题,这取决于测试运行的顺序以及为什么在本地获得成功。
确保您的测试不以任何方式依赖于其他人。
答案 1 :(得分:0)
我认为这不是詹金斯问题。我认为这是一个测试案例问题。
代码<div class="main">
<div class="left-box">
</div>
<div class="right-box">
<div class="series__table_container">
<div class="container">
<div class="tables__wrapper">
<div class="tables__wrapper-row">
<div class="series__table">
<table>
<thead>
<tr class="tr-names">
<th class="tsl-check">
<label class="check">
<input type="checkbox">
<span class="check_mark"></span>
</label>
</th>
<th class="tsl-series">Select All</th>
<th colspan="6" class="tsl-colgroup active">ASDQWE ASDQWE</th>
<th colspan="1" class="tsl-colgroup active">ASDQWE ASDQWE</th>
<th colspan="10" class="tsl-colgroup active">ASDQWE ASDQWE</th>
<th colspan="2" class="tsl-colgroup active">ASDQWE ASDQWE</th>
<th colspan="1" class="tsl-colgroup active">ASDQWE ASDQWE</th>
<th colspan="5" class="tsl-colgroup active">ASDQWE ASDQWE</th>
<th colspan="13" class="tsl-colgroup active">ASDQWE ASDQWE</th>
<th colspan="4" class="tsl-colgroup active">ASDQWE ASDQWE</th>
</tr>
<tr class="tr-units">
<th class="tsl-series" colspan="2"><strong>Section</strong></th>
<th class="tsl-cell">h<span class="unit">[mm]</span></th>
<th class="tsl-cell">b<span class="unit">[mm]</span></th>
<th class="tsl-cell">t<sub>w</sub><span class="unit">[mm]</span></th>
<th class="tsl-cell">t<sub>f</sub><span class="unit">[mm]</span></th>
<th class="tsl-cell">r<sub>1</sub><span class="unit">[mm]</span></th>
<th class="tsl-cell">d<span class="unit">[mm]</span></th>
<th class="tsl-cell">A<span class="unit">[cm<sup>2</sup>]</span></th>
<th class="tsl-cell">I<sub>y</sub><span class="unit">[cm<sup>4</sup>]</span></th>
<th class="tsl-cell">I<sub>z</sub><span class="unit">[cm<sup>4</sup>]</span></th>
<th class="tsl-cell">I<sub>p</sub><span class="unit">[cm<sup>4</sup>]</span></th>
<th class="tsl-cell">i<sub>y</sub><span class="unit">[mm]</span></th>
<th class="tsl-cell">i<sub>z</sub><span class="unit">[mm]</span></th>
<th class="tsl-cell">i<sub>p</sub><span class="unit">[mm]</span></th>
<th class="tsl-cell">max S<sub>y</sub><span class="unit">[cm<sup>3</sup>]</span></th>
<th class="tsl-cell">max S<sub>z</sub><span class="unit">[cm<sup>3</sup>]</span></th>
<th class="tsl-cell">W<sub>y</sub><span class="unit">[cm<sup>3</sup>]</span></th>
<th class="tsl-cell">W<sub>z</sub><span class="unit">[cm<sup>3</sup>]</span></th>
<th class="tsl-cell">A<sub>y</sub><span class="unit">[cm<sup>2</sup>]</span></th>
<th class="tsl-cell">A<sub>z</sub><span class="unit">[cm<sup>2</sup>]</span></th>
<th class="tsl-cell">I<sub>t</sub><span class="unit">[cm<sup>4</sup>]</span></th>
<th class="tsl-cell">max ω<span class="unit">[cm<sup>2</sup>]</span></th>
<th class="tsl-cell">I<sub>ω</sub><span class="unit">[cm<sup>6</sup>]</span></th>
<th class="tsl-cell">i<sub>ω</sub><span class="unit">[mm]</span></th>
<th class="tsl-cell">W<sub>ω</sub><span class="unit">[cm<sup>4</sup>]</span></th>
<th class="tsl-cell">max S<sub>ω</sub><span class="unit">[cm<sup>4</sup>]</span></th>
<th class="tsl-cell">W<sub>pl,y</sub><span class="unit">[cm<sup>3</sup>]</span></th>
<th class="tsl-cell">W<sub>pl,z</sub><span class="unit">[cm<sup>3</sup>]</span></th>
<th class="tsl-cell">W<sub>pl,ω</sub><span class="unit">[cm<sup>4</sup>]</span></th>
<th class="tsl-cell">α<sub>pl,y</sub><span class="unit"> </span></th>
<th class="tsl-cell">α<sub>pl,z</sub><span class="unit"> </span></th>
<th class="tsl-cell">α<sub>pl,ω</sub><span class="unit"> </span></th>
<th class="tsl-cell">A<sub>pl,y</sub><span class="unit">[cm<sup>2</sup>]</span></th>
<th class="tsl-cell">A<sub>pl,z</sub><span class="unit">[cm<sup>2</sup>]</span></th>
<th class="tsl-cell">N<sub>pl</sub><span class="unit">[kN]</span></th>
<th class="tsl-cell">V<sub>pl,y</sub><span class="unit">[kN]</span></th>
<th class="tsl-cell">V<sub>pl,z</sub><span class="unit">[kN]</span></th>
<th class="tsl-cell">M<sub>pl,y</sub><span class="unit">[kNm]</span></th>
<th class="tsl-cell">M<sub>pl,z</sub><span class="unit">[kNm]</span></th>
<th class="tsl-cell">G<span class="unit">[kg/m]</span></th>
<th class="tsl-cell">A<sub>m</sub><span class="unit">[m<sup>2</sup>/m]</span></th>
<th class="tsl-cell">V<span class="unit">[cm<sup>3</sup>/m]</span></th>
<th class="tsl-cell">A<sub>m</sub>/V<span class="unit">[1/m]</span></th>
</tr>
</thead>
<tbody>
<tr class="" id="605">
<td class="tsl-check">
<label class="check">
<input type="checkbox">
<span class="check_mark"></span>
</label>
</td>
<td class="tsl-series active"><strong>qwe</strong><span class="sl-info-icon"> <a id="605" title="More info"> i </a></span></td>
<td class="tsl-cell" style=""> <a>127.0</a> </td>
<td class="tsl-cell" style=""> <a>76.0</a> </td>
<td class="tsl-cell" style=""> <a>4.0</a> </td>
<td class="tsl-cell" style=""> <a>7.6</a> </td>
<td class="tsl-cell" style=""> <a>7.6</a> </td>
<td class="tsl-cell" style=""> <a>96.6</a> </td>
<td class="tsl-cell" style=""> <a>16.50</a> </td>
<td class="tsl-cell" style=""> <a>473.00</a> </td>
<td class="tsl-cell" style=""> <a>56.00</a> </td>
<td class="tsl-cell" style=""> <a>529.00</a> </td>
<td class="tsl-cell"> <a>53.5</a> </td>
<td class="tsl-cell"> <a>18.4</a> </td>
<td class="tsl-cell"> <a>56.6</a> </td>
<td class="tsl-cell"> <a>42.00</a> </td>
<td class="tsl-cell"> <a>5.50</a> </td>
<td class="tsl-cell"> <a>75.00</a> </td>
<td class="tsl-cell"> <a>15.00</a> </td>
<td class="tsl-cell"> <a>9.79</a> </td>
<td class="tsl-cell"> <a>4.82</a> </td>
<td class="tsl-cell"> <a>2.85</a> </td>
<td class="tsl-cell"> <a>22.69</a> </td>
<td class="tsl-cell"> <a>2000.00</a> </td>
<td class="tsl-cell"> <a>19.4</a> </td>
<td class="tsl-cell"> <a>88.16</a> </td>
<td class="tsl-cell"> <a>32.76</a> </td>
<td class="tsl-cell"> <a>84.00</a> </td>
<td class="tsl-cell"> <a>23.00</a> </td>
<td class="tsl-cell"> <a>131.03</a> </td>
<td class="tsl-cell"> <a>1.120</a> </td>
<td class="tsl-cell"> <a>1.533</a> </td>
<td class="tsl-cell"> <a>1.500</a> </td>
<td class="tsl-cell"> <a>11.55</a> </td>
<td class="tsl-cell"> <a>4.78</a> </td>
<td class="tsl-cell"> <a>388.229</a> </td>
<td class="tsl-cell"> <a>156.734</a> </td>
<td class="tsl-cell"> <a>64.799</a> </td>
<td class="tsl-cell"> <a>19.78</a> </td>
<td class="tsl-cell"> <a>5.31</a> </td>
<td class="tsl-cell"> <a>13.0</a> </td>
<td class="tsl-cell"> <a>0.537</a> </td>
<td class="tsl-cell"> <a>1650.00</a> </td>
<td class="tsl-cell"> <a>325.426</a> </td>
</tr>
</tbody>
</table>
</div> <!-- series__table -->
</div>
<div class="tables__wrapper-row">
<div class="series__table">
<table>
<thead>
<tr class="tr-names">
<th class="tsl-check">
<label class="check">
<input type="checkbox">
<span class="check_mark"></span>
</label>
</th>
<th class="tsl-series">Select All</th>
<th colspan="6" class="tsl-colgroup active">ASDQWE ASDASDASD</th>
<th colspan="1" class="tsl-colgroup active">ASDQWE ASDASDASD</th>
<th colspan="10" class="tsl-colgroup active">ASDQWE ASDASDASD</th>
<th colspan="2" class="tsl-colgroup active">ASDQWE ASDASDASD</th>
<th colspan="1" class="tsl-colgroup active">ASDQWE ASDASDASD</th>
<th colspan="5" class="tsl-colgroup active">ASDQWE ASDASDASD</th>
<th colspan="13" class="tsl-colgroup active">ASDQWE ASDASDASD</th>
<th colspan="4" class="tsl-colgroup active">ASDQWE ASDASDASD</th>
</tr>
<tr class="tr-units">
<th class="tsl-series" colspan="2"><strong>Section</strong></th>
<th class="tsl-cell">h<span class="unit">[mm]</span></th>
<th class="tsl-cell">b<span class="unit">[mm]</span></th>
<th class="tsl-cell">t<sub>w</sub><span class="unit">[mm]</span></th>
<th class="tsl-cell">t<sub>f</sub><span class="unit">[mm]</span></th>
<th class="tsl-cell">r<sub>1</sub><span class="unit">[mm]</span></th>
<th class="tsl-cell">d<span class="unit">[mm]</span></th>
<th class="tsl-cell">A<span class="unit">[cm<sup>2</sup>]</span></th>
<th class="tsl-cell">I<sub>y</sub><span class="unit">[cm<sup>4</sup>]</span></th>
<th class="tsl-cell">I<sub>z</sub><span class="unit">[cm<sup>4</sup>]</span></th>
<th class="tsl-cell">I<sub>p</sub><span class="unit">[cm<sup>4</sup>]</span></th>
<th class="tsl-cell">i<sub>y</sub><span class="unit">[mm]</span></th>
<th class="tsl-cell">i<sub>z</sub><span class="unit">[mm]</span></th>
<th class="tsl-cell">i<sub>p</sub><span class="unit">[mm]</span></th>
<th class="tsl-cell">max S<sub>y</sub><span class="unit">[cm<sup>3</sup>]</span></th>
<th class="tsl-cell">max S<sub>z</sub><span class="unit">[cm<sup>3</sup>]</span></th>
<th class="tsl-cell">W<sub>y</sub><span class="unit">[cm<sup>3</sup>]</span></th>
<th class="tsl-cell">W<sub>z</sub><span class="unit">[cm<sup>3</sup>]</span></th>
<th class="tsl-cell">A<sub>y</sub><span class="unit">[cm<sup>2</sup>]</span></th>
<th class="tsl-cell">A<sub>z</sub><span class="unit">[cm<sup>2</sup>]</span></th>
<th class="tsl-cell">I<sub>t</sub><span class="unit">[cm<sup>4</sup>]</span></th>
<th class="tsl-cell">max ω<span class="unit">[cm<sup>2</sup>]</span></th>
<th class="tsl-cell">I<sub>ω</sub><span class="unit">[cm<sup>6</sup>]</span></th>
<th class="tsl-cell">i<sub>ω</sub><span class="unit">[mm]</span></th>
<th class="tsl-cell">W<sub>ω</sub><span class="unit">[cm<sup>4</sup>]</span></th>
<th class="tsl-cell">max S<sub>ω</sub><span class="unit">[cm<sup>4</sup>]</span></th>
<th class="tsl-cell">W<sub>pl,y</sub><span class="unit">[cm<sup>3</sup>]</span></th>
<th class="tsl-cell">W<sub>pl,z</sub><span class="unit">[cm<sup>3</sup>]</span></th>
<th class="tsl-cell">W<sub>pl,ω</sub><span class="unit">[cm<sup>4</sup>]</span></th>
<th class="tsl-cell">α<sub>pl,y</sub><span class="unit"> </span></th>
<th class="tsl-cell">α<sub>pl,z</sub><span class="unit"> </span></th>
<th class="tsl-cell">α<sub>pl,ω</sub><span class="unit"> </span></th>
<th class="tsl-cell">A<sub>pl,y</sub><span class="unit">[cm<sup>2</sup>]</span></th>
<th class="tsl-cell">A<sub>pl,z</sub><span class="unit">[cm<sup>2</sup>]</span></th>
<th class="tsl-cell">N<sub>pl</sub><span class="unit">[kN]</span></th>
<th class="tsl-cell">V<sub>pl,y</sub><span class="unit">[kN]</span></th>
<th class="tsl-cell">V<sub>pl,z</sub><span class="unit">[kN]</span></th>
<th class="tsl-cell">M<sub>pl,y</sub><span class="unit">[kNm]</span></th>
<th class="tsl-cell">M<sub>pl,z</sub><span class="unit">[kNm]</span></th>
<th class="tsl-cell">G<span class="unit">[kg/m]</span></th>
<th class="tsl-cell">A<sub>m</sub><span class="unit">[m<sup>2</sup>/m]</span></th>
<th class="tsl-cell">V<span class="unit">[cm<sup>3</sup>/m]</span></th>
<th class="tsl-cell">A<sub>m</sub>/V<span class="unit">[1/m]</span></th>
</tr>
</thead>
<tbody>
<tr class="" id="605">
<td class="tsl-check">
<label class="check">
<input type="checkbox">
<span class="check_mark"></span>
</label>
</td>
<td class="tsl-series active"><strong>qwe</strong><span class="sl-info-icon"> <a id="605" title="More info"> i </a></span></td>
<td class="tsl-cell" style=""> <a>127.0</a> </td>
<td class="tsl-cell" style=""> <a>76.0</a> </td>
<td class="tsl-cell" style=""> <a>4.0</a> </td>
<td class="tsl-cell" style=""> <a>7.6</a> </td>
<td class="tsl-cell" style=""> <a>7.6</a> </td>
<td class="tsl-cell" style=""> <a>96.6</a> </td>
<td class="tsl-cell" style=""> <a>16.50</a> </td>
<td class="tsl-cell" style=""> <a>473.00</a> </td>
<td class="tsl-cell" style=""> <a>56.00</a> </td>
<td class="tsl-cell" style=""> <a>529.00</a> </td>
<td class="tsl-cell"> <a>53.5</a> </td>
<td class="tsl-cell"> <a>18.4</a> </td>
<td class="tsl-cell"> <a>56.6</a> </td>
<td class="tsl-cell"> <a>42.00</a> </td>
<td class="tsl-cell"> <a>5.50</a> </td>
<td class="tsl-cell"> <a>75.00</a> </td>
<td class="tsl-cell"> <a>15.00</a> </td>
<td class="tsl-cell"> <a>9.79</a> </td>
<td class="tsl-cell"> <a>4.82</a> </td>
<td class="tsl-cell"> <a>2.85</a> </td>
<td class="tsl-cell"> <a>22.69</a> </td>
<td class="tsl-cell"> <a>2000.00</a> </td>
<td class="tsl-cell"> <a>19.4</a> </td>
<td class="tsl-cell"> <a>88.16</a> </td>
<td class="tsl-cell"> <a>32.76</a> </td>
<td class="tsl-cell"> <a>84.00</a> </td>
<td class="tsl-cell"> <a>23.00</a> </td>
<td class="tsl-cell"> <a>131.03</a> </td>
<td class="tsl-cell"> <a>1.120</a> </td>
<td class="tsl-cell"> <a>1.533</a> </td>
<td class="tsl-cell"> <a>1.500</a> </td>
<td class="tsl-cell"> <a>11.55</a> </td>
<td class="tsl-cell"> <a>4.78</a> </td>
<td class="tsl-cell"> <a>388.229</a> </td>
<td class="tsl-cell"> <a>156.734</a> </td>
<td class="tsl-cell"> <a>64.799</a> </td>
<td class="tsl-cell"> <a>19.78</a> </td>
<td class="tsl-cell"> <a>5.31</a> </td>
<td class="tsl-cell"> <a>13.0</a> </td>
<td class="tsl-cell"> <a>0.537</a> </td>
<td class="tsl-cell"> <a>1650.00</a> </td>
<td class="tsl-cell"> <a>325.426</a> </td>
</tr>
</tbody>
</table>
</div> <!-- series__table -->
</div>
</div> <!-- tables__wrapper -->
</div> <!-- container -->
</div>
</div>
</div>
能够正确生成URI。
我假设Jenkins在内部转换为每个容器(微服务)提供的URL,并正确解析该名称。被测系统可以正常工作,并且可以成功创建URL。
请更改您的输入URL,您的应用程序将开始引发错误。
答案 2 :(得分:0)
原因是因为我在Windows上,所以本地工作正常。 在docker中,该容器不是Windows容器,因此它将字符串识别为绝对LOCAL PATH,因为Uri也支持路径。
我最终改变了单元测试并添加了额外的检查。