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

时间:2020-06-16 09:19:36

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

我有一个单元测试在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上尝试过,但是失败:(

3 个答案:

答案 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也支持路径。

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