NSockituteを使用してmockingとfakingしています。私はEF6で働いているとセットアップデータベースコンテキストのSaveChangesAsync-法の例外をスローするようにしたいと思います:NS substitute、例外をスローするように設定された非同期メソッドでtry catchが動作しない
try
{
var fromDatabase = await context.Entries.OfType<Document>().FirstOrDefaultAsync(d => d.Id == doc.Id);
if (fromDatabase == null)
{
fromDatabase = new Document();
context.Entries.Add(fromDatabase);
}
PatchEntity(fromDatabase, doc);
await context.SaveChangesAsync();
}
catch (DbUpdateException ex)
{
var innerException = ex.InnerException as SqlException;
if (innerException != null && innerException.Number == 2627)
{
errors.Add(new DbValidationError(nameof(doc.Name), "A entry with the same Name already exists under the selected parent."));
}
}
:
context.SaveChangesAsync().Throws(new DbUpdateException("", SqlExceptionHelper.CreateSqlException(2627)));
はSaveChangesAsyncは、このように私のデータリポジトリのメソッド内で呼び出されます
そして、これは私のユニットテスト内の行です:(!)
var result = await repository.TryAddOrUpdateDocument(doc);
残念ながら私のテストは、私のテストメソッドが例外をスローしていることを、私はCにしようとしている、その理由で失敗し続けますアーチ。一般的な例外キャッチブロックを追加しても機能しない場合、例外はキャッチされません。例外はバブリングしています。
私のテストは "public async Task ..."と宣言されていますが、単純にvoidにして、私のリポジトリのasyncメソッドで.Resultを呼び出すことは役に立ちません。何が起こっている?
ありがとう:
のようなものを試してみてください! –