NUnitのCategoryを用いて、特定のテストコードをCIに実行させない
NUnitのテストコードをJenkinsなどのCIで動かすとき、ローカルでは成功するのに、CIサーバーでは失敗し、訳あって成功できないことがあります。
UIを伴うテストコード、DBを直接更新するテストコードなど……。
動くような環境を作りたいのは山々だが、余裕がない。
こんなとき、CIでの実行を無視したい場合の対応方法としてCategoryアトリビュートを使って、ひとまずCIで実行させない方法を紹介します。
参考サイト
試行環境
- TeamCity
- NUnit 3.6.0
手元の環境がTeamCityなのでTeamCityで説明しますが、Jenkinsでも同様のことができると思います。
Categoryアトリビュートの宣言
あらかじめ、CIで除外対象にするカテゴリー名を決めておきます。
今回は「BuidServerIgnore」として宣言しますが、「JenkinsIgnore」でも、お好きなように。
除外したいテストコードにCategoryアトリビュートで宣言します。
/// <summary>
/// <see cref="BaseGameInfo.SaveDataBase"/>をテストします。
/// </summary>
/// <remarks>
/// TeamCityだと失敗するので、Category属性を付与
/// </remarks>
[Category("BuildServerIgnore")]
[Test]
public void SaveDatabase()
{
// 何かしらの DB処理
}
CI(TeamCity)で除外するように設定
NUnitの起動引数に「--where "cat != BuildServerIgnore"」といったように宣言します。
これで「BuildServerIgnore」とCategoryが宣言されたテストコードは除外されます。
おわりに
実際には、オンコードではなく、定数化しておいてCategory宣言が良いかと思います。
public class TestSetup
{
public const string BuildServerIgnoreCategory = "BuildServerIgnore";
}
[Category(TestSetup.BuildServerIgnoreCategory)]
[Test]
public void SaveDatabase()
{
// 省略
}
Author And Source
この問題について(NUnitのCategoryを用いて、特定のテストコードをCIに実行させない), 我々は、より多くの情報をここで見つけました https://qiita.com/rim_0720/items/294d71dddd2935614b31著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .