0

Asp.Net Web API に 3 つのレイヤーがあります。EF を使用して実装されたコントローラー層、サービス層、およびリポジトリー層。

私は単体テストが初めてで、データベース内のIDだけで人を取得する単純な関数を持っています。

基本的にサービス層が呼び出します

Unit_Work.Person_Repository.GetPersonByID(id);

リポジトリはこれを行います:

return context.chapters.Where(p=>p.chapterID==id).SingleOrDefault();
  1. これにどのようなユニットテストを書くでしょうか。
  2. データベースまたはモック実装を使用する必要があります。
  3. Sql Server Compact を使用して模擬人物を入力し、ID でその人物を取得しようと考えましたが、これは正しいです。

答えてくれたすべての人に前もって感謝します。

4

3 に答える 3

-1

データには xml/ .csv ファイルを使用できます。つまり、単体テスト プロジェクト内の xml ファイルから ID、章の詳細を取得する必要があります。次に、id をパラメーターとして渡し、xml ファイルからのデータ フェッチで戻り値を確認する必要があります。わからない場合はお知らせください。新規プロジェクトの追加オプションを使用して単体テスト プロジェクトを作成できます。次にvs2010では、テストするデータを取得するためのxmlファイルを追加するオプションがあります。

あなたの3番目の質問も正しいです。u cn データベースからデータを入力し、戻り値でデータをチェックします

于 2013-02-28T10:36:23.450 に答える
-1

エンティティ フレームワーク コンテキストをモックしてリポジトリに挿入することをお勧めします。

http://nuget.org/packages/FakeDbSet/に似たものを使用してこれを行います

次に、単体テストは次のようになります。

[TestFixture]
class UsersControllerTester
{
    private Mock<IMyEntities> mockData = null;

    [SetUp]
    public void Setup()
    {
        // Create fake data            
        var inMemoryUsers = new InMemoryDbSet<User>();
        inMemoryUsers.Add(new User { ID = 1, FIRSTNAME = "Arne", LASTNAME = "Anka", EMAIL = "arne.anka@email.com", FULLNAME = "Anka, Arne", USERNAME = "arne.anka" });
        inMemoryUsers.Add(new User { ID = 2, FIRSTNAME = "Bertil", LASTNAME = "Björn", EMAIL = "bertil.bjorn@email.com", FULLNAME = "Björn, Bertil", USERNAME = "bertil.bjorn" });
        inMemoryUsers.Add(new User { ID = 3, FIRSTNAME = "Carl", LASTNAME = "Cool", EMAIL = "carl.cool@email.com", FULLNAME = "Cool, Carl", USERNAME = "carl.cool" });
        inMemoryUsers.Add(new User { ID = 4, FIRSTNAME = "David", LASTNAME = "Dûsk", EMAIL = "david.dusk@email.com", FULLNAME = "Dûsk, David", USERNAME = "david.dusk" });

        // Create mock unit of work
        mockData = new Mock<IMyEntities>();
        mockData.Setup(m => m.Users).Returns(inMemoryUsers);      
    }

    [Test]
    public void GetUser()
    {           
        // Test
        var usersController = new UsersController(mockData.Object);

        // Invoke
        User user1 = usersController.GetUser("1");     

        // Assert
        Assert.NotNull(user1);
        Assert.AreEqual(1, user1.ID);
        Assert.AreEqual("Anka", user1.LASTNAME);
    }
于 2013-02-28T13:14:22.830 に答える