最近、C#プロジェクトの1つであるMoq
ライブラリ(4.5.21)の非常に興味深い動作を発見しました。以下は私がテストしようとしているクラスです。Moqを使って異なる状態のオブジェクトを使ってメソッド呼び出しを確認する
Moq.MockException:
Expected invocation on the mock once, but was 0 times: x => x.UpdateOrderAsync(It.Is<Order>(o => o.State == "new"))
Configured setups:
x => x.UpdateOrderAsync(It.Is<Order>(o => o.State == "new")), Times.Once
x => x.UpdateOrderAsync(It.Is<Order>(o => o.State == "open")), Times.Once
Performed invocations:
IOrderService.UpdateOrderAsync(Order<State:open>)
IOrderService.UpdateOrderAsync(Order<State:open>)
は私が期待する私はVerify
できる方法が毎回Once
と呼ばれていたということobject
と:私は出力次取得
[TestMethod]
public async Task TestMethod()
{
var mock = new Mock<IOrderService>();
await new Program().RunAsync(mock.Object);
mock.Verify(x => x.UpdateOrderAsync(It.Is<Order>(o => o.State == "new")), Times.Once);
mock.Verify(x => x.UpdateOrderAsync(It.Is<Order>(o => o.State == "open")), Times.Once);
}
:以下
public class Order
{
public string State { get; set; }
}
public interface IOrderService
{
Task UpdateOrderAsync(Order order);
}
public class Program
{
public async Task RunAsync(IOrderService orderService)
{
var order = new Order();
order.State = "new";
await orderService.UpdateOrderAsync(order);
order.State = "open";
await orderService.UpdateOrderAsync(order);
}
}
は私のTestClassをあります異なった
State
と。私は何が間違っているのだろうか?
ありがとうございました!