[英]c# Rhino mocks - Is this an appropriate use of mocks?
请原谅我的无知。 我正在努力学习犀牛。
public Foo(Stream stream)
{
if (stream == null) throw new ArgumentNullException("woot");
if (!stream.CanRead) throw new NotSupportedException("sporkish");
if (!stream.CanSeek) throw new NotSupportedException("monkey");
}
我想通过对这些异常进行测试来测试NUnit测试的这个函数。 这是模拟对象的适当用法,还是我真的需要创建一个特殊的继承类Stream? 如果嘲笑是合适的,我该如何使用Rhino? 我可以弄清楚如何从函数(我认为)返回虚拟值,但不是属性。
您可以创建Stream
的模拟,指示它无法读取且无法搜索,如下所示
MockRepository mocks = new MockRepository();
Stream mockStream = mocks.StrictMock<Stream>();
Expect.Call(mockStream.CanRead).Return(false);
Expect.Call(mockStream.CanSeek).Return(false);
mocks.ReplayAll();
// Perform the unit test.
mocks.VerifyAll();
关于嘲笑的一些值得记住的事情:
CanRead
和CanSeek
的时候VerifyAll()
被调用时,一个异常将被抛出失败测试。 Stream
,您可以覆盖您关注的属性,因此您可以轻松实现创建模拟的目标。 如果你想模拟一个非虚拟/可覆盖的属性,你将面临更艰巨的任务。 对于您的场景,为了测试抛出的三个异常,您需要创建两个单独的模拟以到达所有代码路径:一个失败第一个断言( !stream.CanRead
),另一个传递第一个断言并且失败第二个断言( !stream.CanSeek
)。
这是模拟的适当用法。 你需要三个模拟对象。 一个没有stream.CanRead
,一个没有stream.CanSeek
,一个有两个(为了成功测试)。
不要忘记,这可能涉及将您正在使用的Stream
功能分解为单独的界面(以便您可以从界面构建模拟对象)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.