Was ist der beste Weg in Rhino Mocks zu testen, dass ein bestimmter Parameter beim Aufruf von FINAL an eine Methode übergeben wird? ZB mockview.SetSomething (myObj) kann beliebig oft von mockview.Init aufgerufen werden, aber ich möchte es beim letzten Aufruf als mockview.SetSomething (inParticular) testen.Wie kann ich mit "RhinoMocks" die "Parameter im letzten Anruf" testen?
Jetzt weiß ich, ich kann GetArgumentsForCallsMadeOn mit diesem verwenden, aber mein Problem ist, dass es nicht funktioniert, wenn ich die Parameterhaltevariable nachträglich geändert habe. z
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");
}
}
dann meine Tests sind ...
[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];
Was ich will SetSomething, dass der letzte Anruf war mit zu überprüfen ist, {name = "Two", age = 2}. Arbeitet Presenter dies, aber würden Sie nicht auch WorkingPresenter erwarten?
Hallo Patrick.Ja Entschuldigung: in dem Versuch, den Code zu vereinfachen, habe ich das Problem vereinfacht! Das Folgende zeigt, was ich denke, das Problem ist. Um fair zu sein, sehe ich jetzt bessere Möglichkeiten, den Code zu schreiben, aber ich würde trotzdem intuitiv erwarten, dass NotWorkingPresenter funktioniert. –