标签: rhino-mocks-3.5

呼叫无效,最后一次呼叫已被使用或未进行任何呼叫

当我尝试设置模拟时,我收到此错误PropertyBehavior():

System.InvalidOperationException:System.InvalidOperationException:无效调用,最后一次调用已被使用或未进行任何调用(请确保您正在调用虚拟(C#)/ Overridable(VB)方法).

我试图只使用Rhino Mocks 3.5(安排,行动,断言)

这是我的代码:

    private IAddAddressForm form;

    private AddAddressMediator mediator;

    [TestInitialize()]
    public void MyTestInitialize()
    {
        form = MockRepository.GenerateMock<IAddAddressForm>();
        mediator = new AddAddressMediator(form);


        // Make the properties work like a normal property
        Expect.Call(form.OKButtonEnabled).PropertyBehavior();

        //I tried this too.  I still get the exception
        //SetupResult.For(form.OKButtonEnabled).PropertyBehavior();
    }


    [TestMethod]
    public void TestOKButtonEnabled()
    {

        form.OKButtonEnabled = true;
        Assert.IsTrue(form.OKButtonEnabled);
    }
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用存根(对于我应该使用的代码),但我正在尝试学习Rhino Mocks.

最终,我希望能够确保访问多个属性的值.(关于如何检查form.FirstName访问的任何提示(即调用getter)也将不胜感激.)

如果需要,以下代码IAddressForm:

namespace AddressBook
{
    public interface IAddAddressForm
    {
        string FirstName { get; set; …
Run Code Online (Sandbox Code Playgroud)

c# rhino-mocks visual-studio-2008 visual-studio rhino-mocks-3.5

19
推荐指数
1
解决办法
2万
查看次数

Rhino Mocks循序渐进教程

我意识到有一些帖子,比如这个问过同样的问题.但是,建议页面上的链接不起作用(它只是让我回到博客主页).

我正在寻找的是一个没有任何假设的先前犀牛模拟知识的教程.

我需要的是一步一步的指导,这也解释了基础(存根VS嘲笑VS expect.call),怎么Record(),ReplayAll(),VerifyAll(),当/为什么你使用Repeat.Any()等工作.

在阅读了一些文档(我发现一些文章很有用但最多让人感到困惑)后,我有一个粗略的理解,但我需要更多的例子,详细解释如何使用rhino模拟.

tdd rhino-mocks rhino-mocks-3.5

16
推荐指数
1
解决办法
3万
查看次数

使用Rhino Mocks如何存根使用params关键字的方法?

我试图在存储库上设置期望.该方法使用params关键字:

string GetById(int key, params string[] args);
Run Code Online (Sandbox Code Playgroud)

我设定的期望:

var resourceRepo = MockRepository.GenerateMock<IResourceRepository>();
resourceRepo.Expect(r => r.GetById(
    Arg<int>.Is.Equal(123),
    Arg<string>.Is.Equal("Name"),
    Arg<string>.Is.Equal("Super"),
    Arg<string>.Is.Equal("Mario"),
    Arg<string>.Is.Equal("No"),
    Arg<string>.Is.Equal("Yes"),
    Arg<string>.Is.Equal("Maybe")))
    .Return(String.Empty);
Run Code Online (Sandbox Code Playgroud)

抛出此异常:

测试方法XYZ引发异常:System.InvalidOperationException:在记录时在模拟方法调用中仅使用Arg.预计有2个参数,已经定义了7个.

设定我的期望有什么问题?

c# rhino-mocks mocking stub rhino-mocks-3.5

9
推荐指数
1
解决办法
3818
查看次数

Rhino - 模拟类而不是覆盖虚方法

如果我正在嘲笑一个类,如下所示,有什么方法可以让模拟重写虚方法?我知道我可以简单地删除虚拟修饰符,但我实际上想要稍后删除此方法的行为.

换句话说,除了删除虚拟修饰符之外,我怎么能让这个测试通过:

namespace Sandbox {
    public class classToMock {
       public int IntProperty { get; set; }

       public virtual void DoIt() {
           IntProperty = 1;
       }
}

public class Foo {
    static void Main(string[] args) {
        classToMock c = MockRepository.GenerateMock<classToMock>();
        c.DoIt();

        Assert.AreEqual(1, c.IntProperty);
        Console.WriteLine("Pass");
    }
}
Run Code Online (Sandbox Code Playgroud)

}

c# rhino-mocks rhino-mocks-3.5

5
推荐指数
1
解决办法
2422
查看次数

犀牛模拟参数检查......有更好的方法吗?

我正在使用Rhino Mocks 3.5模拟一个服务方法调用,该调用需要2个参数,我想确保正确设置对象上的某个属性.

// Method being tested
void UpdateDelivery( Trade trade )
{
    trade.Delivery = new DateTime( 2013, 7, 4 );
    m_Service.UpdateTrade( trade, m_Token ); // mocking this
}
Run Code Online (Sandbox Code Playgroud)

这是我的一部分代码(有效)

service, trade, token declared / new'd up ... etc.
...

using ( m_Mocks.Record() )
{
    Action<Trade, Token> onCalled = ( tradeParam, tokenParam ) =>
            {
                // Inspect / verify that Delivery prop is set correctly
                // when UpdateTrade called
                Assert.AreEqual( new DateTime( 2013, 7, 4 ), tradeParam.Delivery );                     
            };

    Expect.Call( …
Run Code Online (Sandbox Code Playgroud)

c# unit-testing rhino-mocks rhino-mocks-3.5

4
推荐指数
1
解决办法
1484
查看次数

RhinoMocks:AssertWasCalled在Stub上不起作用

我试图用RhinoMocks声明某个属性设置器被调用.但它没有按预期工作.

以下简化示例说明了该问题.

考虑这个界面:

public interface IMyInterface
{
    string SomeProperty { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

现在考虑以下代码:

var mock = MockRepository.GenerateStub<IMyInterface>();
mock.SomeProperty = "abc";

mock.AssertWasCalled(x => x.SomeProperty = Arg<string>.Is.Anything);
Run Code Online (Sandbox Code Playgroud)

我期待最后一行的断言会毫无问题地通过.但是,它正在抛出ExpectationViolationException这条消息:

"IMyInterface.set_SomeProperty(任何东西);预期#1,实际#0."

我不明白为什么会发生这种情况.有人可以帮忙吗?

c# unit-testing assert rhino-mocks rhino-mocks-3.5

2
推荐指数
1
解决办法
1268
查看次数

在单元测试中处理多个模拟和断言

我目前有一个存储库,它使用Entity Framework进行我的CRUD操作.

这是注入我需要使用此repo的服务.

使用AutoMapper,我将实体Model投影到Poco模型上,并且服务返回poco.

如果我的对象有多个属性,那么设置然后断言我的属性的正确方法是什么?

如果我的服务有多个repo依赖项,那么设置我所有模拟的正确方法是什么?* - 一个类[setup],其中为这些测试装置配置了所有的模拟和对象?*****

我想避免进行10次测试,每次测试在属性上有50个断言,并且每次测试都有几十个模拟设置.这使得可维护性和可读性变得困难.

我已阅读Art of Unit Testing,但没有发现任何有关如何处理此案例的建议.

我使用的工具是Rhino Mocks和NUnit.

我也在SO上发现了这个,但它没有回答我的问题:正确的单元测试服务/存储库交互

这是一个表达我所描述内容的示例:

public void Save_ReturnSavedDocument()
{
    //Simulate DB object
    var repoResult = new EntityModel.Document()
        {
            DocumentId = 2,
            Message = "TestMessage1",
            Name = "Name1",
            Email = "Email1",
            Comment = "Comment1"
        };

    //Create mocks of Repo Methods - Might have many dependencies
    var documentRepository = MockRepository.GenerateStub<IDocumentRepository>();
    documentRepository.Stub(m => m.Get()).IgnoreArguments().Return(new List<EntityModel.Document>()
        {
           repoResult
        }.AsQueryable());

    documentRepository.Stub(a => a.Save(null, null)).IgnoreArguments().Return(repoResult);

    //instantiate service and inject repo
    var documentService = …
Run Code Online (Sandbox Code Playgroud)

c# nunit unit-testing repository-pattern rhino-mocks-3.5

2
推荐指数
1
解决办法
1553
查看次数