1

CRUD システムをテストするための一連の単体テストを作成しています。

ユーザーを登録する必要がTest1あります-これはを返しますServiceKey 次に、必要なデータを追加するTest2必要がありますServiceKey

を渡す最良の方法は何ServiceKeyですか? に設定しようとしましたTestContextが、テストの間に消えてしまうようです。

4

2 に答える 2

2

単体テスト間で状態を共有しないでください。これは、優れた単体テストの非常に重要な特性の 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;
}
于 2013-03-01T15:27:34.213 に答える
0

単体テストの考え方は、各テストが 1 つの機能をチェックすることです。テストの間に依存関係を作成すると、それらが常に成功するかどうかはわかりません (別の順序で実行されるなど)。

あなたの特定のケースであなたができることは、あなたTest1をそのままにしておくことです。登録プロセスの機能のみに焦点を当てています。ServiceKeyそれをどこにも保存する必要はありません。テストメソッド内でアサートするだけです。

2 番目のテストでは、正常に実行するために必要なすべてを (偽の) セットアップする必要があります。一般的には、"Arrange Act Assert"-Principleに従うことをお勧めします。この原則では、データをテスト用にセットアップし、それに基づいて動作し、すべてが意図したとおりに機能するかどうかを確認します (テストの明確さと構造も向上します)。

したがってServiceKey、最初のテスト実行で得られるものを偽造するのが最善です。このようにして、テストするデータを制御することもはるかに簡単になります。モッキング フレームワーク (vs2012 の moq やフェイクなど) を使用して、必要な方法でデータを配置します。moqは、モッキングのための非常に軽量なフレームワークです。まだモッキングユーティリティを使用していない場合は、チェックしてください。

お役に立てれば。

于 2013-03-02T17:02:03.523 に答える