CRUD システムをテストするための一連の単体テストを作成しています。
ユーザーを登録する必要がTest1
あります-これはを返しますServiceKey
次に、必要なデータを追加するTest2
必要がありますServiceKey
を渡す最良の方法は何ServiceKey
ですか? に設定しようとしましたTestContext
が、テストの間に消えてしまうようです。
CRUD システムをテストするための一連の単体テストを作成しています。
ユーザーを登録する必要がTest1
あります-これはを返しますServiceKey
次に、必要なデータを追加するTest2
必要がありますServiceKey
を渡す最良の方法は何ServiceKey
ですか? に設定しようとしましたTestContext
が、テストの間に消えてしまうようです。
単体テスト間で状態を共有しないでください。これは、優れた単体テストの非常に重要な特性の 1 つですIndependency
。テストは互いに影響を与えるべきではありません。
この StackOverflow の投稿を参照してください: What Makes a Good Unit Test?
編集:コメントへの回答
ロジック/動作 (メソッド) を共有するには、共通コードをヘルパー メソッドに抽出し、さまざまなテスト (ユーザー モックを作成するヘルパー メソッドなど) から呼び出すことができます。
private IUser CreateUser(string userName)
{
var userMock = MockRepository.GenerateMock<IUser>();
userMock.Expect(x => x.UserName).Return(userName);
return userMock;
}
単体テストの考え方は、各テストが 1 つの機能をチェックすることです。テストの間に依存関係を作成すると、それらが常に成功するかどうかはわかりません (別の順序で実行されるなど)。
あなたの特定のケースであなたができることは、あなたTest1
をそのままにしておくことです。登録プロセスの機能のみに焦点を当てています。ServiceKey
それをどこにも保存する必要はありません。テストメソッド内でアサートするだけです。
2 番目のテストでは、正常に実行するために必要なすべてを (偽の) セットアップする必要があります。一般的には、"Arrange Act Assert"-Principleに従うことをお勧めします。この原則では、データをテスト用にセットアップし、それに基づいて動作し、すべてが意図したとおりに機能するかどうかを確認します (テストの明確さと構造も向上します)。
したがってServiceKey
、最初のテスト実行で得られるものを偽造するのが最善です。このようにして、テストするデータを制御することもはるかに簡単になります。モッキング フレームワーク (vs2012 の moq やフェイクなど) を使用して、必要な方法でデータを配置します。moqは、モッキングのための非常に軽量なフレームワークです。まだモッキングユーティリティを使用していない場合は、チェックしてください。
お役に立てれば。