2017-02-24 14 views
2
public async Task<ResModel> GetDetails() 
{ 
    ResModel resp = new ResModel(); 
    resp = await MobController.GetAllDeatails(); 
    return resp; 
} 

awaitでは、これはGetAllDeatailsという名前の非同期タスクメソッドを呼び出し、オブジェクトResModelを返します。別の非同期タスクを待つAsyncTaskのユニットテスト方法は?

ユニットテストを正しく作成するにはどうすればよいですか?私が作成した

ユニットテストは、右下の次のとおりです。

[TestMethod] 
public async Task GetFromGetDetails() 
{ 
    var controller = new SevicesController(); 
    ResModel resp = new ResModel(); 

    using(ShimsContext.Create()) 
    { 
     ProjectAPI.Fakes.ShimMobController.GetAllDeatails =() => { 
      resp.MessageType = "Get" 
      resp.Message ="contdetail"; 

      return resp; 
     }; 

     returnValueOfAsyncTask = await controller.GetDetails(); 

     Assert.IsNotNull(returnValueOfAsyncTask); 
    } 

} 

戻り値の型がGetAllDeatailsに非同期でなければならないので、これはShimContext作成でエラーが発生しますが、ここでそれが唯一のオブジェクトを返します。

エラーCS0029は、暗黙的に 'System.Threading.Tasks.Task<ProjectAPI.Models.ResModel>' アンitTestProjectAPI

にタイプ 'ProjectAPI.Models.ResModel'を変換できません。私は取得しています主なエラーです。

+0

親愛なる@BartoszKP非同期公衆私は質問を編集しました。そして、あなたが示唆したように、それを絞り込むいます。この問題は、** ProjectAPI.Fakes.ShimMobController.GetAllDeatails **のように作成する偽のメソッドで行う必要があります。これはAsyncオブジェクトを返さなければならないためですが、ここではオブジェクトを返すだけです –

+0

ありがとうございます。 、エラーメッセージを貼り付けるそれはあなたが – BartoszKP

+0

おかげ@BartoszKP :)何を言ってるのかエラー完全には明らかだそう**エラー\t CS0029 \tポストの電子は、暗黙的に「System.Threading.Tasks.Taskに型「ProjectAPI.Models.ResModel」を変換できません。 '\t UnitTestProjectAPI ** 私が得ている主なエラーです。問題は、私が偽物として作成している戻り値の型と指定されたAsyncTaskメソッドとの違いでなければなりません。何か案が....? –

答えて

1

エラーメッセージには、ResModelをに変換できないことが明確に記載されています。これは、シムされるメソッドの戻り値の型です。

シムでは、メソッドがタスクを返すと想定されるときにモデルを返します。モデルをタスクにラップして戻って待つことができるようにするには、Task.FromResultを使用します。

テスト中のメソッドの演習では、待っている結果を保持するために使用される変数がTask<ResModel>であると述べました。これは変更する必要があります。await結果を返すタスクは、タスクではなく結果を返します。結果変数をTask<ResModel>からResModelに変更する必要があります。

上記の変更に基づいてアップデートユニットテストが行​​われます。

[TestMethod] 
public async Task GetFromGetDetails() { 
    //Arrange 
    var controller = new SevicesController(); 
    var expected = new ResModel(); 

    using(ShimsContext.Create()) { 

     ProjectAPI.Fakes.ShimMobController.GetAllDeatails =() => { 
      expected.MessageType = "Get" 
      expected.Message ="contdetail"; 

      return Task.FromResult(expected); 
     }; 

     //Act 
     var actual = await controller.GetDetails(); 

     //Assert 
     Assert.IsNotNull(actual); 
     Assert.AreEqual(expected, actual); 
    } 
} 
+0

親愛なる@Nkosiすぐにお返事ありがとうございます。私もそれを試みた。 ** returnValueOfAsyncTask =の行では、Response.GetDetails()をResponseとして待ちます** lineは上記の同じエラーを返します。助言がありますか? しかし、これは私に1行に絞っていただきありがとうございます。 –

+0

@TharushaShehan 'returnValueOfAsyncTask'のタイプは何ですか?エラーメッセージは何ですか? – Nkosi

+0

親愛なる@Nkosiエラーは上記と同じエラーです。 **エラーCS0029 'ProjectAPI.Models.ResModel'タイプを 'System.Threading.Tasks.Task 'に暗黙的に変換することはできません。Un itTestProjectAPI ** ここでは、コメント。 ** returnValueOfAsyncTask **はユニットテストとしてアサートしている変数です**タスクです ** –

0

変更メソッドの戻り値の型 (タスク < ResModel> GetFromGetDetails()

+0

これはテスト方法です。それを変更する必要はありません。 – Nkosi

+0

親愛なる@Shobaあなたの答えに感謝します。ソースコードを変更することはできません。それは他の多くの機能と関連しています。だから私はテスト目的のためだけに変更することはできません。 –

関連する問題