最小起订量修改在调用 void 方法时受保护

发布于 2024-09-16 04:41:40 字数 507 浏览 10 评论 0原文

我想使用 moq 一个 void 方法,并在调用时将值设置为受保护的属性。

public class MyClass{ public Guid Id {get; protected set; } }

public interface IMyRespository { public void Save(MyClass myClass); }

比如:

var moq = new Mock<IMyRespository>();
var my = new MyClass();
moq.Setup(x=>x.Save(my));

我想设置保存时的 Id 不再是 Guid.Empty。 Save 是一个 void 方法,因此没有返回,并且 using:

.Callback(() => my = new MyClassImpl(new Guid("..")))

不起作用。

I want to use moq a void method and set a value to a protected property when is called.

public class MyClass{ public Guid Id {get; protected set; } }

public interface IMyRespository { public void Save(MyClass myClass); }

Something like:

var moq = new Mock<IMyRespository>();
var my = new MyClass();
moq.Setup(x=>x.Save(my));

I want to setup that Id on save is no more a Guid.Empty.
Save is a void method so no returns, and using:

.Callback(() => my = new MyClassImpl(new Guid("..")))

is not working..

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

戏蝶舞 2024-09-23 04:41:40

首先,你必须正确设定期望。我认为你真正想要的是设置模拟,以便它接受 MyClass 的任何实例:

moq.Setup(x=>x.Save(It.IsAny<MyClass>()));

然后,你设置一个回调,如下所示:

moq.Setup(x=>x.Save(It.IsAny<MyClass>()))
   .Callback((myClassParam) => my = myClassParam);

将它们放在一起将让你构造一个接受的模拟MyClass 并将 MyClass 实例保存到 my 变量中:

[TestMethod]
public void Test() {
  var moq = new Mock<IMyRespository>();
  MyClass my = null;
  moq.Setup(x=>x.Save(It.IsAny<MyClass>()))
     .Callback((myClassParam) => my = myClassParam);
  var newMyClass = new MyClassImpl(new Guid(".."));
  moq.Object.Save(newMyClass);
  Assert.AreSame(newMyClass, my);
}

First, you have to set up the expectation properly. I think what you actually want is to set up the mock so that it accepts any instance of MyClass:

moq.Setup(x=>x.Save(It.IsAny<MyClass>()));

Then, you set up a callback like so:

moq.Setup(x=>x.Save(It.IsAny<MyClass>()))
   .Callback((myClassParam) => my = myClassParam);

Putting it all together will let you construct a mock that accepts MyClass and saves the MyClass instance to my variable:

[TestMethod]
public void Test() {
  var moq = new Mock<IMyRespository>();
  MyClass my = null;
  moq.Setup(x=>x.Save(It.IsAny<MyClass>()))
     .Callback((myClassParam) => my = myClassParam);
  var newMyClass = new MyClassImpl(new Guid(".."));
  moq.Object.Save(newMyClass);
  Assert.AreSame(newMyClass, my);
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文