5 つの異なる TestFixtures で多数の統合テストを含む nunit テスト プロジェクトを作成しました。ConfigSettings
属性を持つクラスと、基本的にデータベースに接続して設定を取得する属性[SetupFixture]
を持つメソッドがあります。[SetUp]
取得した設定は、テスト全体で使用する必要があります。5 つの異なる TestFixtures はすべて、このクラスから継承されConfigSettings
ます。
SetupFixture
[setup]
テストごとにメソッドが実行されることに気付いたので、フラグ「 HasRun
」を使用してこれを回避しました。ただし、TestFixture1 の準備が整い、ランナーが TestFixture2 に移動するHasRun
と、新しいインスタンスが作成されるため、再び 0 になります。SetupFixture
TestSuite の開始時に属性クラスを 1 回だけ実行するにはどうすればよいですか? 解決策は、HasRun
プロパティと他のすべてのプロパティを静的にすることですが、NUnit の新しいインスタンスを開くと、プロパティは最初のインスタンスと同じ値になります。アイデアはありますか?
問題は基本的に、静的クラスの 2 番目のインスタンスが最初のインスタンスのプロパティ値を引き続き取得し、それらを新しい設定で上書きすると、最初のインスタンスが 2 番目のインスタンスの値を使用することです。この動作の回避策はありますか?
これは私がやろうとしていることのサンプルコードです:
以下は、他のテストフィクスチャの前にプロジェクトの開始時に実行する必要がある SetupFixture クラスです:-
[SetUpFixture]
public class ConfigSettings
{
private static string strConnectionString = @"connectionStringHere";
public string userName { get; set; }
public string userId { get; set; }
public int clientId { get; set; }
public int isLive { get; set; }
public int HasRun { get; set; }
[SetUp]
public void GetSettings()
{
if (HasRun != 1)
{
Console.WriteLine("executing setup fixture..");
HasRun = 1;
using (var db = new autodb(strConnectionString))
{
var currentSession = (from session in db.CurrentSessions
where session.TestSuiteID == 1
orderby session.TestStarted descending
select session).FirstOrDefault();
userId = currentSession.UserId.ToString();
clientId = currentSession.ClientID;
isLive = currentSession.IsLive;
etc...
}
}
}
}
今、各 TestFixture から ConfigSettings クラスを継承し、そのプロパティにアクセスしています。
[TestFixture]
public class TestFixture1: ConfigSettings
{
[Test]
public void Test1()
{
Console.WriteLine("executing test 1...");
Console.WriteLine(userId);
}
[Test]
public void Test2()
{
Console.WriteLine("executing test 2...");
Console.WriteLine(clientId);
}
}
ありがとう。