2016-08-01 12 views
4

私は、Web APIを持っていると私はそうのようなエンドポイントを暴露しています:のIQueryableユニットまたは統合テスト

API /ホリデー名= {名前}

これはのためのコントローラのgetメソッドのですか?ウェブAPI:

public IQueryable<Holiday> GetHolidayByName(string name) 
{ 
    return db.Holiday.Where(n => string.Equals(n.Name, name)); 
} 

名前が等しいかどうかを確認するユニット/統合テストを作成するにはどうすればよいですか?私は結果がnullではないが、私は名前を確認することができますどのように混乱したビットをチェックすることができます等しい:すべての

[TestMethod] 
public void GetHoliday_GetHolidayByName() 
{ 
    // Arrange 
    HolidaysController controller = new HolidaysController(); 

    // Act 
    IQueryable<Holiday> actionResult = controller.GetHolidayByName("Spain"); 

    //Assert 
    Assert.IsNotNull(actionResult); 

    //any attempt to check names are equal results in a fail 
    //For instance this fails 
    var result = controller.GetHolidayByName("Spain") as OkNegotiatedContentResult<Holiday>; 
    Assert.AreEqual("Spain", result.Content.Name);   
} 
+2

モック 'db.Holiday'をハードコードしてアイテムを作成し、' GetHolidayByName'を呼び出してその結果を確認してください。 – Jonesopolis

+0

http://blog.ploeh.dk/2012/03/26/IQueryableTisTightCoupling/ –

答えて

3

このテストはlinqを使って返された結果はあなたの基準を満たします。

[TestMethod] 
public void GetHoliday_GetHolidayByName() 
{ 
    // Arrange 
    string name = "Spain"; 
    HolidaysController controller = new HolidaysController(); 

    // Act 
    IQueryable<Holiday> actionResult = controller.GetHolidayByName(name); 

    //Assert 
    Assert.IsNotNull(actionResult); 
    Assert.IsTrue(actionResult.All(n => string.Equals(n.Name, name)); 
} 

ここで、dbは必要なテストデータを提供することを前提としています。それ以外の場合は、模擬/偽のデータを提供するためにいくつかの設計変更を行う必要があります。

実際のデータベースに接続している場合、これはユニットテストではなく統合テストです。

0
public interface IDbRepository 
{ 
    IQueryable<Holiday> GetHolidayByName(string name) 
} 

public class DbRepository : IDbRepository 
{ 
    public IQueryable<Holiday> GetHolidayByName(string name) 
    { 
     return db.Holiday.Where(n => string.Equals(n.Name, name)); 
    } 
} 
private IDbRepository _dbRepository;//initialize, preferably through construtor 
public IQueryable<Holiday> GetHolidayByName(string name) 
    { 
     return _dbRepository.GetHolidayByName(name) 
    } 
0

まず、私はあなたがデシベル結果が、オブジェクトをテストする必要があると思います。あなたのメソッドをモックして "Holiday"アイテムを与え、オブジェクトの "equals"メソッドをオーバーライドするか、チェックする必要があるプロパティをコンパイルするだけです

関連する問題