2016-05-08 1 views
1

新しいプロジェクトを開始したばかりで、ソリューションには単体テストがありません。だから私は単体テストで平均以下のスキルを向上させ、アプリケーションを学ぶための良い方法は、私が順番にテストを書くことだと思った。Xunitメソッドが期待通りに動作しない

は、私は私は自分自身が答えを見つけることができないような答えで検索しましたので、これは簡単な質問かもしれません前のxUnitとあまり行っていません。

私はテストしようとしているwebapiプロジェクトです。コントローラは、例えば、ロギングのためのその方法を含むベースコントローラを有する。私のコントローラから

public class BaseController : ApiController 
{ 
    private readonly ILog _log; 

    public BaseController(ILog log) 
    { 
     _log = log; 
    } 


    [ApiExplorerSettings(IgnoreApi = true)] 
    public virtual void Log(Enums.RequestType requestType, string detail) 
    { 
     _log.Info(string.Format("{0} | {1}",requestType, detail)); 
    } 

public virtual async Task<ActionResult<MyDetail>> Get([FromUri]long id) 
    { 
     Enums.RequestType requestType = Enums.RequestType.GET; 
     Log(requestType, "start called"); 
     var card = await _repository.FindItemAsync(id); 
     Log(requestType, "thats a rap"); 
    } 

私のテストでは、これまでのように見える

[Fact()] 
    public void TestMyDetailsReturnsDetailAndLogs() 
    { 
     var detail = MockDetail(); 


     _myController = new Mock<MyDetailController>(_repository.Object, _logging.Object); 
     _myController.Setup(m => m.Log(It.IsAny<Enums.RequestType>(), 
             It.IsAny<string>())); 



     _repository.Setup(x => x.FindItemAsync(It.IsAny<long>()) 
     .ReturnsAsync(detail); 

     var controllerResult = _myController.Object.Get(detail.Id); 
     _myController.VerifyAll(); 

     var negotiatedResult = controllerResult.Result; 
     Assert.NotNull(negotiatedResult); 

追加情報:次のセットアップが一致しなかった。

MyController m => m.Log(It.IsAny<RequestType>(), It.IsAny<String>()) 

2つの質問、なぜこのメッセージが表示されますか?私はセットアップを持っているようm.Log

私のコントローラとリポジトリ内のI私のブレークポイントが打たれるべきか?

どのようなヘルプが素晴らしいでしょう!

答えて

0

私はあなたのコントローラが嘲笑されているので、Getメソッドが呼び出されないため、内部実装の呼び出しが一致していないと思います。とにかく、あなたのコントローラをテストしているなら、それをモックするべきではありません。

0

"_myController"を嘲笑しましたが、何かを返す必要があります。 あなたが望むものを返却したいので、あなたはそれを嘲笑します。

これで最後にリターンを追加します。あなたのケースにタイプのログでリターンの内部を記入してください。

_myController.Setup(m => m.Log(It.IsAny()、 It.IsAny()))戻り値(XXX);

例:trueを返すためにログインログインはブール値を返すと言うと、あなたが望むことができます。 。 それはその _myController.Setup(M => m.Log(It.IsAny()、 It.IsAny()))リターン(真)のようなものになるだろう。

関連する問題