テストごとに個別のインメモリデータベースを作成するにはどうすればよいですか?

パトリック

.NET Core 3.0でxunitを使用してテストを作成していますが、インメモリデータベースに問題があります。テストごとに個別のデータベースが必要ですが、問題の原因となる単一のデータベースを作成しましたが、テストごとに新しいデータベースを作成する方法がわかりません。

public class AccountAdminTest : IClassFixture<CustomWebApplicationFactory<Startup>>
{
    private readonly HttpClient _client;
    private IServiceScopeFactory scopeFactory;
    private readonly CustomWebApplicationFactory<Startup> _factory;
    private ApplicationDbContext _context;

    public AccountAdminTest(CustomWebApplicationFactory<Startup> factory)
    {
        _factory = factory;
        _client = _factory.CreateClient(new WebApplicationFactoryClientOptions
        {
            AllowAutoRedirect = true,
            BaseAddress = new Uri("https://localhost:44444")
        });

        scopeFactory = _factory.Services.GetService<IServiceScopeFactory>();
        var scope = scopeFactory.CreateScope();
        _context = scope.ServiceProvider.GetService<ApplicationDbContext>();
    }
}

public class CustomWebApplicationFactory<TStartup> : WebApplicationFactory<TStartup> where TStartup : class
{
    protected override void ConfigureWebHost(IWebHostBuilder builder)
    {
        builder.ConfigureTestServices(services =>
        {
            var descriptor = services.SingleOrDefault(
                d => d.ServiceType ==
                    typeof(DbContextOptions<ApplicationDbContext>));

            if (descriptor != null)
            {
                services.Remove(descriptor);
            }

            services.AddDbContext<ApplicationDbContext>((options, context) =>
            {
                context.UseInMemoryDatabase("IdentityDatabase");
            });
        });
    }
}

今ではこのように見えますが、それでも機能しません。AddDbContextでライフタイムを変更しても、何も変更されません。

public class AccountAdminTest : IDisposable
{
    public AccountAdminTest(ITestOutputHelper output)
    {
        this.output = output;

        _factory = new CustomWebApplicationFactory<Startup>();

        _client = _factory.CreateClient(new WebApplicationFactoryClientOptions
        {
            AllowAutoRedirect = true,
            BaseAddress = new Uri("https://localhost:44444")
        });

        scopeFactory = _factory.Services.GetService<IServiceScopeFactory>();
        _scope = scopeFactory.CreateScope();
        _context = _scope.ServiceProvider.GetService<ApplicationDbContext>();


        var _user = User.getAppAdmin();
        _context.Add(_user);
        _context.SaveChanges(); //Here i got error on secound test. It says "An item with the same key has already been added"
    }

    public void Dispose()
    {
        _scope.Dispose();
        _factory.Dispose();
        _context.Dispose();
        _client.Dispose();
    }

データベース名としてGuidを使用すると、トークンを取得できません。ユーザー名/パスワードが無効であると表示されます。認証にIdentityServerを使用しています

public async Task<string> GetAccessToken(string userName, string password, string clientId, string scope)
        {
            var disco = await _client.GetDiscoveryDocumentAsync("https://localhost:44444");
            if (!String.IsNullOrEmpty(disco.Error))
            {
                throw new Exception(disco.Error);
            }
            var response = await _client.RequestPasswordTokenAsync(new PasswordTokenRequest
            {
                Address = disco.TokenEndpoint,
                ClientId = clientId,
                Scope = scope,
                UserName = userName,
                Password = password,
            });
            return response.AccessToken;
        }
クリス・プラット

変更する必要があるのは、次のコードだけです。

services.AddDbContext<ApplicationDbContext>((options, context) =>
{
    context.UseInMemoryDatabase("IdentityDatabase");
});

定数値の代わりに、"IdentityDatabase"次のようなものを使用しますGuid.NewGuid().ToString()

context.UseInMemoryDatabase(Guid.NewGuid().ToString());

その後、コンテキストがフェッチされるたびに、新しいインメモリデータベースが使用されます。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

テストごとに個別のインメモリデータベースを作成するにはどうすればよいですか?

分類Dev

PHPUnitテスト用のインメモリデータベースを作成するにはどうすればよいですか?

分類Dev

Djangoのユーザーごとに個別のデータベースを作成するにはどうすればよいですか?

分類Dev

PostgreSQLのデータベースごとにDBパラメータを個別に設定するにはどうすればよいですか?

分類Dev

Robot Frameworkで、テキストファイルのデータ行ごとに個別のテストケースを作成して、データ駆動型テストを実行するにはどうすればよいですか?

分類Dev

データベースのonclickを更新するインクリメントボタンをCodeigniterで作成するにはどうすればよいですか?

分類Dev

特定のデータベース(同時テストごとに個別のデータ)に対して実行されるスレッドの数を制限(キュー)するにはどうすればよいですか?

分類Dev

年ごとの時系列データのトレイン/テスト分割を作成するにはどうすればよいですか?

分類Dev

特定の列インデックスをループし、Rで条件またはステートメントを使用して個別のデータフレームを作成するにはどうすればよいですか?

分類Dev

Firebaseデータベースから個別のノードを取得するクエリを作成するにはどうすればよいですか?

分類Dev

Dockerを使用して「ボリュームストアメタデータデータベースを開いているとき」のデーモンタイムアウトエラーを解決するにはどうすればよいですか?

分類Dev

高dpiモニターと低dpiモニターのスケーリングを個別に設定するにはどうすればよいですか?

分類Dev

高dpiモニターと低dpiモニターのスケーリングを個別に設定するにはどうすればよいですか?

分類Dev

ラスターベースのシェープファイルのIDごとにトリミングされたラスターを作成するためのループを作成するにはどうすればよいですか?

分類Dev

SQLiteを使用してインメモリデータベースを作成するにはどうすればよいですか?

分類Dev

動作可能なmySQLデータベースを必要とするテストモジュールを作成するにはどうすればよいですか?

分類Dev

ディスク上の別々のデータベースに存在する、同じノードアプリの別々のエンドポイントに別々のPouchDBを作成するにはどうすればよいですか?

分類Dev

インメモリSQLiteデータベースで行レベルのロックを実現するにはどうすればよいですか?

分類Dev

ARMテンプレート内で別のClearDbMySQLデータベースタイプを選択するにはどうすればよいですか?

分類Dev

プロットを個別にコンピュータに保存せずに、テキストファイルからプロットのアニメーション(mpegムービーなど)を作成するにはどうすればよいですか?

分類Dev

postgreSQLデータベースのカウンターを適切にインクリメントするにはどうすればよいですか?

分類Dev

gridViewリストモデルの要素ごとに異なるページにルーティングするにはどうすればよいですか?

分類Dev

スタイリングの目的でインデックスページに個別の要素を投稿するにはどうすればよいですか?

分類Dev

jsでif / thenステートメントを作成する際に、配列内のデータをテストするにはどうすればよいですか?

分類Dev

イベントリスナーをすべてのアイテムに個別にアタッチする代わりに、イベント委任を使用するにはどうすればよいですか?

分類Dev

ProgrammingErrorを回避するにはどうすればよいですか:Djangoモデルインスタンスをリモートデータベースに保存するときにタイプ「DateTimeRangeField」を適応させることはできませんか?

分類Dev

リクエストのトランザクションとは別のデータベーストランザクションでコンテンツアイテムを読み書きするにはどうすればよいですか?

分類Dev

HTTPステータスコードごとに個別の例を提供するにはどうすればよいですか?

分類Dev

Firebaseデータベースから個別のアイテムを取得するにはどうすればよいですか?

Related 関連記事

  1. 1

    テストごとに個別のインメモリデータベースを作成するにはどうすればよいですか?

  2. 2

    PHPUnitテスト用のインメモリデータベースを作成するにはどうすればよいですか?

  3. 3

    Djangoのユーザーごとに個別のデータベースを作成するにはどうすればよいですか?

  4. 4

    PostgreSQLのデータベースごとにDBパラメータを個別に設定するにはどうすればよいですか?

  5. 5

    Robot Frameworkで、テキストファイルのデータ行ごとに個別のテストケースを作成して、データ駆動型テストを実行するにはどうすればよいですか?

  6. 6

    データベースのonclickを更新するインクリメントボタンをCodeigniterで作成するにはどうすればよいですか?

  7. 7

    特定のデータベース(同時テストごとに個別のデータ)に対して実行されるスレッドの数を制限(キュー)するにはどうすればよいですか?

  8. 8

    年ごとの時系列データのトレイン/テスト分割を作成するにはどうすればよいですか?

  9. 9

    特定の列インデックスをループし、Rで条件またはステートメントを使用して個別のデータフレームを作成するにはどうすればよいですか?

  10. 10

    Firebaseデータベースから個別のノードを取得するクエリを作成するにはどうすればよいですか?

  11. 11

    Dockerを使用して「ボリュームストアメタデータデータベースを開いているとき」のデーモンタイムアウトエラーを解決するにはどうすればよいですか?

  12. 12

    高dpiモニターと低dpiモニターのスケーリングを個別に設定するにはどうすればよいですか?

  13. 13

    高dpiモニターと低dpiモニターのスケーリングを個別に設定するにはどうすればよいですか?

  14. 14

    ラスターベースのシェープファイルのIDごとにトリミングされたラスターを作成するためのループを作成するにはどうすればよいですか?

  15. 15

    SQLiteを使用してインメモリデータベースを作成するにはどうすればよいですか?

  16. 16

    動作可能なmySQLデータベースを必要とするテストモジュールを作成するにはどうすればよいですか?

  17. 17

    ディスク上の別々のデータベースに存在する、同じノードアプリの別々のエンドポイントに別々のPouchDBを作成するにはどうすればよいですか?

  18. 18

    インメモリSQLiteデータベースで行レベルのロックを実現するにはどうすればよいですか?

  19. 19

    ARMテンプレート内で別のClearDbMySQLデータベースタイプを選択するにはどうすればよいですか?

  20. 20

    プロットを個別にコンピュータに保存せずに、テキストファイルからプロットのアニメーション(mpegムービーなど)を作成するにはどうすればよいですか?

  21. 21

    postgreSQLデータベースのカウンターを適切にインクリメントするにはどうすればよいですか?

  22. 22

    gridViewリストモデルの要素ごとに異なるページにルーティングするにはどうすればよいですか?

  23. 23

    スタイリングの目的でインデックスページに個別の要素を投稿するにはどうすればよいですか?

  24. 24

    jsでif / thenステートメントを作成する際に、配列内のデータをテストするにはどうすればよいですか?

  25. 25

    イベントリスナーをすべてのアイテムに個別にアタッチする代わりに、イベント委任を使用するにはどうすればよいですか?

  26. 26

    ProgrammingErrorを回避するにはどうすればよいですか:Djangoモデルインスタンスをリモートデータベースに保存するときにタイプ「DateTimeRangeField」を適応させることはできませんか?

  27. 27

    リクエストのトランザクションとは別のデータベーストランザクションでコンテンツアイテムを読み書きするにはどうすればよいですか?

  28. 28

    HTTPステータスコードごとに個別の例を提供するにはどうすればよいですか?

  29. 29

    Firebaseデータベースから個別のアイテムを取得するにはどうすればよいですか?

ホットタグ

アーカイブ