【问题标题】:How to Mock this concept如何模拟这个概念
【发布时间】:2011-09-21 18:32:06
【问题描述】:
class Test : ITest
{
   public string MyValue { get; }
   public string Detail {get; set;}
}

我想用这种方式模拟 MyValue 方法

Test myTest = new Test() { Detail = "My Test" };
MockRepository repositoryTest = new MockRepository(MockBehavior.Default);
Mock<Test> mockTest = repositoryTest.Create(myTest);

mockTest.Setup(t => t.MyValue).Returns("Some text");
return myTest;

注意此代码不起作用,仅用于理解我想要的。

其他方式如何模拟现有对象的实例?我使用谷歌起订量。

【问题讨论】:

  • 有什么问题?如果你打电话给myTest.Object.MyValue 你会得到Some Text 我想(从我的头顶)

标签: unit-testing c#-4.0 moq


【解决方案1】:

您可能应该模拟接口,而不是实现类。

使用Mock&lt;T&gt;.Get(T) 从您的T 获取Mock&lt;T&gt;

ITest test = new Mock<ITest>().Object;
Mock<ITest> mockTest = Mock<ITest>.Get(test);

编辑:您可以使用Moq.Stub 命名空间存根属性。看看这个页面:http://blog.theagileworkshop.com/2009/03/24/stubs-in-moq/

【讨论】:

  • 好的,但是如何使用 Mock().Object 就像 Test 对象的实例一样。前任。如果我想设置 Detail 值?
  • @Francis:您是在调用属性设置器(即具体说myTestObject.Detail = someValue)还是只是在您正在测试的代码中调用getter?如果您只是在被测代码中访问该属性,只需在单元测试中使用mockTest.SetupGet(mock =&gt; mock.Detail).Returns(someValue)
  • 我只想模拟属性 MyValue 属性 Detail 必须返回的是自己的值;
  • 我用指向Moq.Stub 的链接更新了我的答案。这可能会对你有所帮助。
  • 我想创建一个 Test 对象的集合,并为每个 Test 对象模拟 MyValue 属性。我想做的是我的课程是一个具有语言本地化机制的域类。我想要的是创建一个域类的集合,并绕过本地化机制。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-09
  • 2023-03-22
  • 1970-01-01
  • 1970-01-01
  • 2011-06-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多