2017-11-30 5 views
0

テストしたいBALコード。メソッドのインラインロジックにmoqを設定する方法

public List<string> GetColorGroupCodes() 
     { 
      var colorGrpCodes = (IEnumerable<POCO.ColourGroup>)colorsRepository.GetColorGroups().Result; 
      var colGrpCodes = (from col in colorGrpCodes select col.GroupCode + "-" + col.Description).ToList(); 
      return colGrpCodes; 
     } 

colorsRepository.GetColorGroups()のmoqを設定できます。しかし、私はmoqサービスコールの後に次の行のmoqを設定することはできません。私の質問をもっと理解するには、以下の方法のコメントをご覧ください。

[Fact] 
     public void GetColorGroupCodes() 
     { 
      var mockColorsRepository = CommonRepository.CreateInstanceOfIMock<IColorsRepository>();   
      var objectsList = Data();// it given the mocked response data as List 
      mockColorsRepository.Setup(rep => rep.GetColorGroups()).Returns(Task.FromResult<IEnumerable<Web.POCO.ColourGroup>>(objectsList)); 
      // Now i can mockup the rep.GetColorGroups() and can retrun which is nead for the next logic **`(from col in colorGrpCodes select col.GroupCode + "-" + col.Description).ToList();`** in BAL 
      // But i don't know how to mock the logic **`(from col in colorGrpCodes select col.GroupCode + "-" + col.Description).ToList();`** via moq and return data as **`List<string>`** data type. 
      ColorsValidator colorsValidator = new ColorsValidator(mockColorsRepository.Object); 
      CoCApiResponse response = colorsValidator.GetColorsList(); 
      Assert.Equal(response.Result, objectsList); 
     } 

私はそれを嘲笑し、論理が返すものを返すだけです。出来ますか?私が間違って理解している場合、他のアイデアを提案してください。

+0

:あなたは何をすべき

は、返される文字列は、あなたが期待するものであることを確認しますので、より多くのようなものですか? – Evk

+1

ビジネスロジックを模擬しようとするべきではありませんが、代わりにテストしてください。 – 3615

+0

私はちょうどそれを嘲笑し、ロジックが返すものを返す必要があります。出来ますか?私が間違って理解している場合、他のアイデアを提案してください。 –

答えて

0

ここでテストできるのは、LINQが既知のデータセットを受け取ったときに期待される結果を返すことだけです。つまり、既知のデータセットをモックで注入したため、LINQはモックデータで動作するはずです。 IEnumerable<ColourGroup>List<string>を比較しているのであなたの主張は失敗します...私は思いますか?あなたが実際にその後、テストされるか - あなたは両方の線を模擬する場合は

/*Substitute this for however you get test data) 
var data = new List<ColourGroup>(); 
data.Add(new ColourGroup(){GroupCode = "1", Description = "Black"}); 
data.Add(new ColourGroup(){GroupCode = "2", Description = "Green"}); 
... 
... 
CoCApiResponse response = colorsValidator.GetColorsList(); 
Assert.AreEqual(reponse.Count(), 2); 
Assert.AreEqual(response.First(),"1-Black"); 
Assert.AreEqual(response.Skip(1).First(),"2-Green"); 
+0

あなたは 'data'をどこで使っていますか?それの使用は何ですか? –

+0

'...'部分は、データを返すようにモックを設定する場所です。私はちょうど模擬データの作成を示していたので、*既知の*データを使って結果を確認する方法を説明することができました。あなたのケースでは 'var objectsList = Data();'を返すだけで、返された 'List 'にどのようなデータが表示されるかはわかりません。 – GPW

関連する問題