2011-11-22 65 views
1

我最近围绕只有setter的属性创建了一个测试,今天我修改了属性以包含接口中的getter,然后测试用例失败。单元测试仅通过setter属性传递,仅通过将属性添加到属性来失败

我已经创建了一个下面的工作和失败的例子。 我不确定它是否显示我的无知,或者是Rhino.Mocks或NUnit中出现这种行为的错误。

我会appreaciate任何输入。

我在Windows 7 64位上使用Visual Studio 2010。 我使用Rhino.Mocks 3.6(2.6尝试建立21以及用于相同的结果) 我使用NUnit,2.5.10.11092

using NUnit.Framework; 
using Rhino.Mocks; 
using Rhino.Mocks.Constraints; 

namespace PropertyTestFailure 
{ 
    public interface ITest 
    { 
     int SetOnlyProperty { set; } 
     int SetGetProperty { get; set; } 
    } 

    /// <summary> 
    /// The property with getter fails. 
    /// It appears purely adding the getter that breaks things. 
    /// </summary> 
    [TestFixture] 
    public class TestCase 
    { 
     [Test] 
     public void SetOnlyPropertyWorks() 
     { 
      var mockTest = MockRepository.GenerateStub<ITest>(); 

      mockTest.SetOnlyProperty = 23; 

      mockTest.AssertWasCalled(x => x.SetOnlyProperty 
       = Arg<int>.Matches(new PredicateConstraint<int>(y => y == 23))); 
     } 

     [Test] 
     public void SetGetPropertyFails() 
     { 
      var mockTest = MockRepository.GenerateStub<ITest>(); 

      mockTest.SetGetProperty = 24; 

      mockTest.AssertWasCalled(x => x.SetGetProperty 
       = Arg<int>.Matches(new PredicateConstraint<int>(y => y == 24))); 
     } 
    } 
} 

故障报告消息。

SetGetPropertyFails : FailedRhino.Mocks.Exceptions.ExpectationViolationException : ITest.set_SetGetProperty(Predicate (TestCase.<SetGetPropertyFails>b__5(obj);)); Expected #1, Actual #0. 
at Rhino.Mocks.RhinoMocksExtensions.AssertWasCalled(T mock, Action`1 action, Action`1 setupConstraints) 
at PropertyTestFailure.TestCase.SetGetPropertyFails() in TestCase.cs: line 40 
+0

什么是失败的消息? –

+0

好吧,这很快,我已经完全忘记了模拟诗的存根行为。有点困惑,它现在与模拟工作,只有一个二传手。谢谢。 –

+0

这些不是你真正的考验吗?你不需要测试那些简单的setter/getters工作。 – tvanfosson

回答

1

变化

MockRepository.GenerateStub<ITest>(); 

MockRepository.GenerateMock<ITest>(); 

一般来说,如果你想断言上的预期行为,你会希望有一个模拟,而不是存根。存根将创建它自己的无法验证行为的getter和setter。

您也可以简化您的AssertWasCalled到:

mockTest.AssertWasCalled(x => x.SetGetProperty = 24); 
+0

我意识到我可以简化这种情况下的测试用例,因为我简化了属性的类型。但是,简化的AssertWasCalled的示例不适用于SetOnlyProperty情况。 –

1

存根对象具有读/写属性的默认get/set属性行为。您可以使用DynamicMock来显式处理属性。