我对NMock和mocking是个新手。有可能重新定义一个期望吗?事实上,我想用很多方法来模拟一个接口。所以我决定分解通用方法的期望,这样就不用写1000次了。我的问题如下:我有一个方法来存根加载一个文件。在大多数情况下,mock不会对此方法做任何事情。所以我分解了SetUp中的期望值
Stub.On(myMock).Method("Load").Will(Return.Value(True));但是,在测试用例中,我想测试使用mock的对象是否能很好地响应异常,所以我放入了我的test方法:
Stub.On(myMock).Method("Load").Will(Throw.Exception(new FileNotFoundException()));当我调试测试时,我看到Load方法返回True。我可以理解这一点,但是否有可能重置方法的异常或重新定义它?
发布于 2011-12-13 20:47:23
我从来没有找到一个好的方法来做这件事。我必须使用自定义操作来设置特定调用所需的值。如下所示:
[TestFixture]
public class Testing
{
public interface IXyz
{
bool Load();
}
public class DelegateAction<T> : NMock2.IAction
{
private Func<T> _resultFunc;
public void SetResultFunction(Func<T> func)
{
_resultFunc = func;
}
public DelegateAction(Func<T> resultFunc)
{
_resultFunc = resultFunc;
}
public void Invoke(Invocation invocation)
{
invocation.Result = _resultFunc();
}
public void DescribeTo(TextWriter writer)
{
}
}
private bool _result = true;
private DelegateAction<bool> _action;
[Test]
public void ResetTheReturnValue()
{
//would be done in general setup...
Mockery mocker = new Mockery();
IXyz test = mocker.NewMock<IXyz>();
_action = new DelegateAction<bool>(() => _result);
Stub.On(test).Method("Load").Will(_action);
//Reset for test.... - if you comment it out true is
//returned as default and the test passes
_action.SetResultFunction(() => { throw new Exception();});
Assert.IsTrue(test.Load());
}
}我通常不会允许设置函数,因为我通常只想偶尔返回一个不同的值,这可以通过更改字段来实现。确保在测试结束时重置内容。
是的,我知道这很糟糕,如果有人知道的话,我希望有一个更好的方法。顺便说一句--如果你不喜欢使用NMock,你可能会想看看像Moq这样的东西。我倾向于使用它有更好的结果,尽管显然您的里程数可能会有所不同:)
https://stackoverflow.com/questions/8488620
复制相似问题