これは私の初めての単体テストテストです。ちょっと質問があります。私は私のサービスをテストするためにメモリデータベースを使用しています。私は正しくそれをやっているのだろうかと思っています。私の最初の質問は、私はすべてのサービスコールで複数のアサーションが必要なのでしょうか?私はInsertProduct
のために断言する必要がありますか?次に、すべてのサービスコールでコンテキストの新しいインスタンスを使用することについてこれをテストしていますか?複数のアサートが必要ですか? xUnitテスト
[Fact]
public void ProductService_DeleteProduct_Test()
{
// arrange
var options = new DbContextOptionsBuilder<ApplicationDbContext>()
.UseInMemoryDatabase(databaseName: "ProductService_DeleteProduct_Test")
.Options;
var product = new Product() { Id = Guid.NewGuid(), Name = "Product"};
// act
// insert
using (var context = new ApplicationDbContext(options))
{
var service = new Service(context);
service.ProductService.InsertProduct(product);
}
// delete
using (var context = new ApplicationDbContext(options))
{
var service = new Service(context);
service.ProductService.DeleteProducts(new List<Guid> { product.Id });
}
// assert
using (var context = new ApplicationDbContext(options))
{
var service = new Service(context);
Assert.Equal(0, service.ProductService.GetAllProducts().Count);
}
}
私はあなたの質問を受け入れる前に、私のテストを修正するためにエンティティフレームワークを使用しています。私は 'context.Database.ExecuteSqlCommand'または' context.Database.SqlQuery'を使う必要があります。 Data.SqlClient; ' – kram005
おそらくあります。しかし、過去に私がテスト・プロジェクトで別の接続文字列を持っていたテスト・スイートがあったことを教えてください。そして未処理のSQLを実行するために裸の 'SqlCommands'を使いました。これにより、テストとプロダクションコードの間の最後の接続さえも取り除かれます。とにかく、これは単なるディテールです。あなたは既存の 'DbContext'を使ってうまくいくでしょう。 –
メモリデータベースにefを使用していて、sqlcommandを使用してメモリデータベースで行う方法がわからないため、dbcontextを使用する必要があります – kram005