0
[Test]
public void TestUserProfileInsert()
{
    using (new TestBindingsWrapper("TestBindings", "", new TestModule()))
    {
    // Setup the mock the dataprovider
    MyMocks.MockDataProvider.Setup(x => x.InsertUserProfile(It.IsAny<IUserProfile>())).Returns(1);

    IUserProfile up = new UserProfile();

    IUserProfileManager manager = new UserProfileManager();
    int result = manager.Insert(up);
    Assert.AreEqual(1, result);
    MyMocks.MockDataProvider.Verify(x => x.InsertUserProfile(up), Times.Once());
    }
} 

私もninjectを使用しています。戻り値を設定しているように見えますが、実際にテストされているのは何ですか?これは冗談ですか、それとも何か不足していますか?

4

2 に答える 2

0

テストを作成するときは、最初にコードを実行して、期待どおりに失敗するようにします (新しいコードの期待される機能または現在の動作のいずれか)。 その後で初めて、コードを作成するか、テストを修正して、問題を解決します。したがって、これがこのテストに関する主な質問である場合は、一歩下がって、実際に何をテストしようとしているのかを自問することをお勧めします.

あなたが投稿したコードは、 Unit TestというよりIntegration Testのようなにおいがしますが、何をしようとしていますか? あなたのコメントは、データベースへの挿入について心配していることを示唆していますが、いくつかのオブジェクトをモックしています。単体テストの場合、非常に多くの具体的なオブジェクト (UserProfileManager など) を手動で初期化していることに驚きました。実際に実行パスを入力する場所はどこですか?MockDataProvider

于 2009-10-28T14:53:48.107 に答える
0

manager.Insert(up) が 1 を返すことをテストしています。これは、成功した場合 (または失敗した場合) に予想される戻りコードであると推測します。次に、最後の行で、提供したモック オブジェクトに単一の挿入があることを確認していると想定します。 . これは基本的に、提供するデータ プロバイダーからのデータを UserProfileManager が正しく渡し、使用していることを確認するためにテストします。

注: このテストをより良くするために、モックが 7 を返すようにしてから、7 が返されていることを確認することをお勧めします。UserProfileManager オブジェクトが 7 を返す可能性は低く、常に 1 を返す可能性があります。

于 2009-09-27T15:20:34.460 に答える