ユニットテストごとにログインしているユーザーがいるため、テストで非同期呼び出し(ログイン)を強制的に実行する必要がありますSetUp
。Async UnitTests in c#
私はこの作業を行う方法を見つけることができません、私はnullポインタの例外、またはセットアップの無効な署名を取得します。
public async void SetUp() {}
これは、私がログインしていないよので、すべての私のテストは、おそらく私のオブジェクトで失敗します。
public async Task SetUp() {}
設定が無効の署名を持っているので、すべての私のテストは無視します。
そして、私はそれぞれのテストでセットアップのX行をコピーする必要はありません。それらはまったく同じものなのでセットアップが何であるかはわかります。
私には何が欠けていますか?これは些細な問題のように見えます。ここで
は何か
CreateTicketViewModel _viewModel;
[SetUp()]
public async void SetUp() //I have tried using Task instead of void
{
IUserService userService = Dependency.Instance.Resolve<IUserService>();
await userService.LoginAsync(this.UserName, this.Password);
_viewModel = Dependency.Instance.Resolve<CreateTicketViewModel>();
}
[TearDown()]
public void TearDown()
{
_viewModel = null; // I have tried removing this
}
[Test()]
public void Initialization()
{
// If I put what's in SetUp here and add "async" before void,
// it works just fine
Assert.IsNotNull(_viewModel);
Assert.IsNotNull(_viewModel.Ticket);
}
私は持っていないSUTに非同期ボイドを持たないことに関する多くのブログ投稿を読んだことがありますが、これらのブログ投稿のどれもがテスト自体について話しません。 デザインに問題はありますか? –
セットアップメソッドの代わりにテストメソッドを非同期にすることはできませんか?あるいは、SetUpメソッドを同期させることさえできます。以前は推奨されています。 –
アサーションのみの非同期テストでは、警告が表示されます。私は可能ならばそれを避けることを望んでいます。 –