2017-08-30 6 views
0

いくつかのテストで私のIVehicleRecordsRepositoryをモックする必要があります。ReturnAsyncで設定、値渡しで返されてもnullになる必要があります

public interface IVehicleRecordsRepository 
{ 
    Task<VehicleRecord> StoreAsync(VehicleRecord veh, Guid? userId = null); 
    //... 
} 

と今私はStoreMethod()がパラメータとして渡されたのと同じ値を返す必要がありますので、xUnitのテストでそれを模擬しよう:だから、ここでレポ・インターフェースです。ここでは、このシナリオをテストするテストです:

[Fact] 
public async Task ShouldGetValueFromMockedMethod() 
{ 
    var mockRepo = new Mock<IVehicleRecordsRepository>(); 
    mockRepo 
     .Setup(repo => repo.StoreAsync(It.IsAny<VehicleRecord>(), Guid.NewGuid())) 
     .ReturnsAsync((VehicleRecord veh, Guid userId) => veh) 
     // tried this too -> .Returns((VehicleRecord veh, Guid userId) => Task.FromResult(veh)) 
     ; 

    VehicleRecord vr = new VehicleRecord(newVehicle, Guid.NewGuid()); 
    var testVeh = await mockRepo.Object.StoreAsync(vr); 
    Assert.NotNull(testVeh); // ====> FAILS HERE 
    Assert.AreEqual(vr, testVeh); 
} 

だから、どのように私は私がお返しにStoreAsync()に渡された同じ値を得ることができますか?

部品番号のバージョン:4.7.99.0

答えて

1

私は部品番号を使用するので、自分の無知を許していませんでした。あなたの行為の声明で

var testVeh = await mockRepo.Object.StoreAsync(vr); 

あなただけの車を録音(「VR」)に渡していますが、あなたの嘲笑オブジェクトは、正しいGuid.NewGuidを()、期待するように設定されていますか?

mockRepo.Setup(repo => repo.StoreAsync(It.IsAny<VehicleRecord>(), Guid.NewGuid())) 

それは期待と一致しないため、「(mockObject。)ReturnsAsync」メソッドを呼び出すことはありません?だということだろうかあなただけVehicleRecordに渡していることから、GUIDを期待しないためにあなたのmockObjectを変更、

var guid = Guid.NewGuid; 
VehicleRecord vr = new VehicleRecord(newVehicle, guid); 
var testVeh = await mockRepo.Object.StoreAsync(vr, guid); 

または、おそらくそれを少し簡素化:

は、あなたのような何かをやってみました

mockRepo.Setup(repo => repo.StoreAsync(It.IsAny<VehicleRecord>())) 
を=> repo.StoreAsync(It.IsAny ()、It.IsAny `` ` mockRepo .Setup(レポ:部品番号の人が指摘したように
+1

また、私は(NULL可能で)このようにそれを設定することができ())) .ReturnsAsync((VehicleRecord veh、Guid uid)=> veh) '' ' – alvipeo

関連する問題