gpt4 book ai didi

Moq:设置一个不返回任何值的方法

转载 作者:行者123 更新时间:2023-12-04 00:46:32 29 4
gpt4 key购买 nike

我正在尝试模拟对存储库的调用。当存储库调用通过使用 Setup() 返回一个值时,我可以成功地这样做。返回:

mock.Setup(m => m.Get(param)).Returns(new CustomObject());

但是,当我尝试对不返回任何值的存储库调用执行相同类型的设置时,Moq 抛出异常并告诉我此方法从未被调用,即模拟上的预期调用恰好 1 次,但为 0 次

准确地说,我正在这样做:

mock.Setup(m => m.UpdateRepository(param1)); // UpdateRepository returns no value
service.DoUpdate(param1);
mock.Verify(m => m.UpdateRepository(param1), Times.Exactly(1));

注意:DoUpdate方法只调用repository.UpdateRepository(param1);

在这种情况下,我是否没有正确使用 Moq 设置?是否有不同的方式来设置不返回任何值的方法?

提前致谢!

最佳答案

您不需要设置对 UpdateRepository 的调用。只需验证一下即可。

给定这些类型:

public interface IRepository
{
void UpdateRepository(string value);
}

public class Service
{
public Service(IRepository repository)
{
_repository = repository;
}

public void DoUpdate(string value)
{
_repository.UpdateRepository(value);
}

private IRepository _repository;
}

您的测试方法可以如下:

const string param1 = "whatever";

var repoMock = new Mock<IRepository>();

var sut = new Service(repoMock.Object);

sut.DoUpdate(param1);

repoMock.Verify(x => x.UpdateRepository(param1), Times.Once());

关于Moq:设置一个不返回任何值的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9169656/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com