首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rhino Mocks AAA快速入门?

Rhino Mocks AAA快速入门?
EN

Stack Overflow用户
提问于 2010-01-24 02:24:57
回答 4查看 5.6K关注 0票数 11

我一直在寻找一些关于在aaa语法中使用Rhino Mocks 3.5+的不错的信息。我发现很多博客混合了新旧的东西,这似乎使得如何使用它变得更加困难。

如果有像早期版本那样的Rhino Mocks AAA小抄,那就太好了。您是否需要了解旧版本Rhino的所有信息才能实际使用新版本?我敢肯定,如果我是一名专家,我会喜欢Rhino的所有功能,但现在我只是在信息中游泳。任何指针或好的链接将是完全感谢!

EN

回答 4

Stack Overflow用户

发布于 2011-03-29 05:19:24

我已经写了一个Rhino Mocks Arrange / Act / Assert (AAA) Syntax Quick Reference。它包含从Ayende's web site和其他几个博客收集的关于这种语法样式的精简信息。

票数 13
EN

Stack Overflow用户

发布于 2010-01-25 16:29:59

我假设您熟悉official documentation,在我看来,它非常好用。我的建议是尝试使用Rhino,当你遇到一些更具体的问题时,搜索解决方案。我不认为有一个全面的Rhino模拟的小抄。我猜你会更幸运地问“我如何使用Rhino Mock做这个和那个”

编辑:嗯,当目标是AAA时,你不需要使用录制/回放。AAA涉及三个步骤:

  • Arrange,,表示设置模拟类的行为,例如

代码语言:javascript
复制
IOmicronDll mockWrapper = MockRepository.GenerateMock<IOmicronDll>();
mockWrapper.Expect(wrapper => wrapper.Lock(1, ref errors)).OutRef(string.Empty).Return(true).Repeat.Any();
mockWrapper.Expect(wrapper => wrapper.Exec(1, "sys:cfg?(type)", ref output, ref errors)).OutRef("1,CMC 56,0;", "").Return(true).Repeat.Any();
mockWrapper.Expect(wrapper => wrapper.Exec("1", "sys:cfg?(type)", ref output, ref errors)).OutRef("1,CMC 56,0;", "").Return(true).Repeat.Any();
Microsoft.Practices.Unity.UnityContainer c = new Microsoft.Practices.Unity.UnityContainer();
c.RegisterInstance<IOmicronDll>(mockWrapper);

  • Act,,它代表执行测试

Microsoft.Practices.ServiceLocation.ServiceLocator.Current.GetInstance();(Int deviceID) { Microsoft.Practices.ServiceLocation.ServiceLocator.Current.GetInstance();{ if (g_Omicron == deviceID) g_Omicron = public Omicron m_UniqueIdentifier = Guid.NewGuid();m_Logger =public m_ID = deviceID;GetConfiguration();g_InstancesCount++;m_PollThread =新线程(新ThreadStart(DoPoll));m_PollThread.Start();}

  • 断言,它代表非常有效的结果

代码语言:javascript
复制
Assert.AreEqual("CMC 56", omicron.Type);
mockWrapper.AssertWasCalled(wrapper => wrapper.Release(), options => options.Repeat.AtLeastOnce());

也许上面的例子不是最好的,但可能会让你找到正确的方向。

票数 1
EN

Stack Overflow用户

发布于 2010-07-13 01:48:59

首先,确保您知道AAA中每个A的含义。你可能知道,但我会包括我的工作定义,以确保答案的完整性:

  • Arrange是我设置输入、模拟/存根的地方,包含被测方法的对象是我调用被测方法的地方,
  • Assert是我根据object

验证发生或没有发生的事情的地方

我喜欢在我的测试代码中添加注释,以提醒我思考每一件事。一个示例可能有助于澄清:假设我有一个服务层类,它使用两个提供程序层类,一个来自“旧”系统,另一个来自“新”系统;我正在测试将旧事物复制到新系统的方法是否对发现的每个旧事物调用一次"CreateThing“方法。

代码语言:javascript
复制
[Test]
public void Should_create_new_Thing_for_each_old_Thing()
{
  // -----
  // arrange

  // hardcode results from old system provider
  List<Thing> oldThings = new List<Thing> { ... };

  // old system provider
  var oldProvider = MockRepository.GenerateStub<IOldSystemProvider>();
  oldProvider.Stub(m=>m.GetThings()).Return(oldThings);

  // new system provider
  var newProvider = MockRepository.GenerateStub<INewSystemProvider>();

  // service object
  var svc = new MyService(oldProvider, newProvider);

  //-----------
  // act
  var result = svc.CopyThings();

  //------------
  // assert
  oldThings.ForEach(thing => 
                    newProvider.AssertWasCalled(prov => prov.CreateThing(thing)));
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2124175

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档