特定のパラメータがメソッドのFINAL呼び出しで渡されるかどうかをテストするには、Rhino Mocksでどのような方法が最適ですか?たとえば、mockview.SetSomething(myObj)はmockview.Initによって何回も呼び出されるかもしれませんが、最後にmockview.SetSomething(inParticular)として呼び出されたことをテストしたいと思います。RhinoMockを使用して「最終通話で渡されたパラメータ」をテストするにはどうすればよいですか?
これでGetArgumentsForCallsMadeOnを使用できることが分かりましたが、後でパラメータ保持変数を変更した場合に問題が発生します。例えば
public interface IView
{
void SetSomething(ViewData data);
}
public class ViewData
{
public int Age { get; set; }
public string Name { get; set; }
public ViewData Person(int age, string name)
{
Age = age;
Name = name;
return (this);
}
}
public class WorkingPresenter
{
public void Init(IView view)
{
var data = new ViewData {Age = 1, Name = "One"};
view.SetSomething(data);
data = new ViewData {Age = 2, Name = "Two"};
view.SetSomething(data);
data = new ViewData {Age = 3, Name = "Three"};
}
}
public class NotWorkingPresenter
{
private ViewData _data;
public void Init(IView view)
{
_data = new ViewData();
view.SetSomething(_data.Person(1, "One"));
view.SetSomething(_data.Person(2, "Two"));
_data.Person(3, "Three");
}
}
その後、私のテストがある...
[Test]
public void GetDataOfLastCall()
{
ViewData dummydata=null;
var view = MockRepository.GenerateStub<IView>();
//Approach 1 : This works
var workingPresenter = new WorkingPresenter();
workingPresenter.Init(view);
var lastCall = view.GetArgumentsForCallsMadeOn(v => v.SetSomething(dummydata)).Count - 1;
var lastParams = view.GetArgumentsForCallsMadeOn(v => v.SetSomething(dummydata))[lastCall];
var lastData = (ViewData)lastParams[0];
//Approach 2: This doesn't
var notWorkingPresenter = new NotWorkingPresenter();
notWorkingPresenter.Init(view);
lastCall = view.GetArgumentsForCallsMadeOn(v => v.SetSomething(dummydata)).Count - 1;
lastParams = view.GetArgumentsForCallsMadeOn(v => v.SetSomething(dummydata))[lastCall];
lastData = (ViewData)lastParams[0];
私が欲しいのはSetSomethingへの最後の呼び出しは、{名前= "二"、年齢= 2}としたことを確認することです。今workingPresenterはこれを行いますが、notWorkingPresenterもそうするとは思いませんか?
こんにちはPatrick.Yes申し訳ありません:コードを簡略化しようとして、私は問題を単純化しました!以下は、私が問題と思うものを示しています。公平になるために、コードを書く上でより良い方法が見えますが、私はまだ直感的にNotWorkingPresenterが動作することを期待していますか? –