我在抽象类FirstName
上有一个虚拟属性Foo
。我需要测试虚拟属性的行为。该测试执行时,该方法永远不会触发(因此无论方法的主体是什么,测试总是失败)。如何将此方法作为我的测试系统?我该如何测试这种方法?
[Subject(typeof(Foo))]
public class When_whatever
{
Establish context = () =>
{
_fooSut = _mockRepository.PartialMock<Foo>(argumentOne, argumentTwo);
};
Because of = () => _result = _fooSut.FirstName;
It should_return_not_null = () => _result.ShouldNotBeNull();
private static string _result;
private static Foo _fooSut;
}
我正在使用Rhino Mocks 3.5和mspec。
答案 0 :(得分:0)
您是否尝试过PartialMock
功能? See here
答案 1 :(得分:0)
我认为你应该在使用mock之前做_mockRepository.ReplayAll()
。但在这种情况下,它应该只是执行。
BTW你想测试什么行为?
我不认为拥有抽象的公共财产是一个好的设计。你也可以发布你的Foo
课程吗?
答案 2 :(得分:0)
您正在创建一个部分模拟,一个实现抽象类的模拟,并为类的虚拟和抽象部分提供模拟功能。
_fooSut = _mockRepository.PartialMock<Foo>(argumentOne, argumentTwo);
您正在调用您所说的虚拟,FirstName
。
_result = _fooSut.FirstName;
但是,你没有存根虚拟呼叫,所以它返回默认值!在这种情况下,null
。您需要将此调用添加到您的上下文中。
_fooSut.Stub(x => x.FirstName).Return("Lance");
我只能开始猜测你是如何为这个摘要实现具体类的。那么,也许你想要做的是测试每个实现为这个属性提供一个非null值?在这种情况下,您可能希望使用behavior。
[Behaviors]
public class ConcreteFoo
{
It should_set_a_non_null_first_name = () => _fooSut.FirstName.ShouldNotBeNull();
protected static Foo _fooSut;
}
Foo
的每个实现都可以针对这些行为进行测试。
[Subject(typeof(DefaultFoo))]
public class When_using_a_default_foo
{
Behaves_like<ConcreteFoo> a_concrete_impl_of_foo;
protected static DefaultFoo _fooSut = new DefaultFoo();
}
[Subject(typeof(CustomFoo))]
public class When_using_a_custom_foo
{
Behaves_like<ConcreteFoo> a_concrete_impl_of_foo;
protected static CustomFoo _fooSut = new CustomFoo();
}