2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

NUnitのCategoryを用いて、特定のテストコードをCIに実行させない

Last updated at Posted at 2018-10-09

 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が宣言されたテストコードは除外されます。

スクリーンショット 2018-10-09 22.58.44.png

おわりに

 実際には、オンコードではなく、定数化しておいてCategory宣言が良いかと思います。

    public class TestSetup
    {
        public const string BuildServerIgnoreCategory = "BuildServerIgnore";
    }
   [Category(TestSetup.BuildServerIgnoreCategory)]
   [Test]
   public void SaveDatabase()
   {
        // 省略
   }
2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?