指定されたオブジェクトを返すが、nullを返す単体テストがあります。NS代理返却オブジェクトが定義されているにもかかわらずAsyncがnullを返す
テストにデータプロバイダ:
public class PlanDataProvider : BaseDomainServiceProvider, IPlanDataProvider
{
//CTOR
public PlanDataProvider(IDataAccessTemplate template, IEntityStore entityStore) : base(template, entityStore)
{
}
public async Task<DefaultActionPlan> GetDefaultActionPlan(string referenceListId)
{
var objectId = GetObjectId(referenceListId);
var defaultActionPlan = await Template.InvokeAsync(context => Task.FromResult(EntityStore.GetEntityById<DefaultActionPlan, ObjectId>
(
context.ActivityContext as IDataAccessContext,
typeof(DefaultActionPlan).FullName,
objectId
)));
}
}
テスト:とにかくトンがnull eferytimeとテストトンのデバッグを返し
public async Task GetPlan_BadPlanID()
{
//Arrange
string badPlanId = "57509afbc6b48d3f33b2dfcd";
...snip...
DefaultActionPlan jj = new ObjectId(badPlanId);
//create EntityStore object
var dataxs = Substitute.For<IDataAccessContext>();
var estore = Substitute.For<IEntityStore>();
estore.GetEntityById<DefaultActionPlan, ObjectId>(
dataxs,
typeof(DefaultActionPlan).FullName,
new ObjectId(badPlanId))
.Returns(Task.FromResult(jj).Result);
var dataAccessTemplate = Substitute.For<IDataAccessTemplate>();
PlanDataProvider pdp = new PlanDataProvider(dataAccessTemplate, estore);
//Act
var t = await pdp.GetDefaultActionPlan(badPlanId);
//Now this confuses me as the compiler thinks t is DefaultActionPlan NOT Task<DefaultActionPlan>???
}
がnullではGetDefaultActionPlanので戻っていませんJJ代わりにnullを? ?
返されたjjは何ですか?
編集:
エリスとゲイブの両方が正しくIEntityStoreの私のモックは、それがリターンは、このようにラッピングInvokeAsyncに渡され取得することはできません指定していても...その値としては十分ではなかったことを指摘しましたInvokeAsyncも同様にモックする必要がありました。
Gabeさんの答えは、Arg.AnyがInvokeAsyncに必要なparmsを満たしていないため、わずかにオフになっていました。しかし、私は複数のプロジェクト(これは大きな会社です)に渡って継承チェーンを追跡する時間を費やしたので、私は彼のことを間違っていません。彼は何かにアクセスする権限がありません。ここで終わりで
に成功したコードは次のとおりです。私はあなたのコードでこれを見ませんが
var estore = Substitute.For<IEntityStore>();
var dataAccessTemplate = Substitute.For<IDataAccessTemplate>();
dataAccessTemplate.InvokeAsync(context => Task.FromResult(
estore.GetEntityById<DefaultActionPlan>(
dataxs, typeof(DefaultActionPlan).FullName, new ObjectId(badPlanId))))
.ReturnsForAnyArgs(jj);
var pdp = new PlanDataProvider(dataAccessTemplate, estore);
'IDataAccessTemplate'はあなたのメソッドを決して定義しませんでした。 'await Template.InvokeAsync'は' InvokeAsync'の空のモックを呼び出すか、実際には引数を使ってメソッドを呼び出しますか? – Eris