将某些参数的方法模拟为 return 并为所有其他参数抛出异常
Mocking a method to return for some parameters and throws exception for all other parameters
我正在使用 Moq
来模拟一个方法:
public class DbService : IDbService
{
public Record GetRecord(Guid Id)
{
// Returns the record if exists.
// Throws exception if record not found.
}
}
我想模拟这个,如果我传递这三个 guid,它 returns 记录并且 所有其他 Guid 抛出异常。
Guid id = Guid.NewGuid();
Guid id2 = Guid.NewGuid();
Guid id3 = Guid.NwGuid();
var mock = new Mock<IDbService>();
mock.Setup(t => t.GetRecord(id)).Returns(record1);
mock.Setup(t => t.GetRecord(id2)).Returns(record2);
mock.Setup(t => t.GetRecord(id3)).Returns(record3);
// Throw exception for all other guids...
我该怎么做?
下面的代码应该可以解决问题:
mock.Setup(t => t.GetRecord(It.Is<Guid>(q => q != id && q != id2 && q != id3)))
.Throws(new Exception("Bad Guid"));
您可以为此使用 MockBehavior.Strict
:
Guid id = Guid.NewGuid();
Guid id2 = Guid.NewGuid();
Guid id3 = Guid.NwGuid();
var mock = new Mock<IDbService>(MockBehavior.Strict);
mock.Setup(t => t.GetRecord(id)).Returns(record1);
mock.Setup(t => t.GetRecord(id2)).Returns(record2);
mock.Setup(t => t.GetRecord(id3)).Returns(record3);
// do stuff
// will throw if GetRecord was called with arguments
// that don't match to any configured setup.
mock.VerifyAll();
原来这么简单:
mock.Setup(t => t.GetRecord(It.IsAny<Guid>())).Throws(new MyException());
mock.Setup(t => t.GetRecord(id)).Returns(record1);
mock.Setup(t => t.GetRecord(id2)).Returns(record2);
mock.Setup(t => t.GetRecord(id3)).Returns(record3);
我正在使用 Moq
来模拟一个方法:
public class DbService : IDbService
{
public Record GetRecord(Guid Id)
{
// Returns the record if exists.
// Throws exception if record not found.
}
}
我想模拟这个,如果我传递这三个 guid,它 returns 记录并且 所有其他 Guid 抛出异常。
Guid id = Guid.NewGuid();
Guid id2 = Guid.NewGuid();
Guid id3 = Guid.NwGuid();
var mock = new Mock<IDbService>();
mock.Setup(t => t.GetRecord(id)).Returns(record1);
mock.Setup(t => t.GetRecord(id2)).Returns(record2);
mock.Setup(t => t.GetRecord(id3)).Returns(record3);
// Throw exception for all other guids...
我该怎么做?
下面的代码应该可以解决问题:
mock.Setup(t => t.GetRecord(It.Is<Guid>(q => q != id && q != id2 && q != id3)))
.Throws(new Exception("Bad Guid"));
您可以为此使用 MockBehavior.Strict
:
Guid id = Guid.NewGuid();
Guid id2 = Guid.NewGuid();
Guid id3 = Guid.NwGuid();
var mock = new Mock<IDbService>(MockBehavior.Strict);
mock.Setup(t => t.GetRecord(id)).Returns(record1);
mock.Setup(t => t.GetRecord(id2)).Returns(record2);
mock.Setup(t => t.GetRecord(id3)).Returns(record3);
// do stuff
// will throw if GetRecord was called with arguments
// that don't match to any configured setup.
mock.VerifyAll();
原来这么简单:
mock.Setup(t => t.GetRecord(It.IsAny<Guid>())).Throws(new MyException());
mock.Setup(t => t.GetRecord(id)).Returns(record1);
mock.Setup(t => t.GetRecord(id2)).Returns(record2);
mock.Setup(t => t.GetRecord(id3)).Returns(record3);