2017-11-02 7 views
1

.Net Core 2.0を使用してWeb APIを作成しています。私はActive Directory Graph API(https://docs.microsoft.com/en-us/azure/active-directory-b2c/active-directory-b2c-devquickstarts-graph-dotnet)を使って新しいユーザーを作成しています。サードパーティのAPIをテストする方法。ユニットテストまたは統合テストを作成する必要がありますか?

// arrange 
var service = new ADGraphService(); 

// act 
bool result = service.CreateUser(new UserModel(){ Email = "[email protected]", ..... }); 
var users = service.GetUsers(); 

// assert 
result.Should().Be(true); 
users.Should().Contain(user => user.Email == "[email protected]"); 

それとも、このようなインターフェースのユニットテストの実装:

1があるべき
// arrange 
...... 
var fakeHttpClient = new Mock<IHttpClient>(); 
fakeHttpClient.Setup(x => x.PostAsync(url, userModelContent)).Returns(mockJsonResult); 
var service = new ADGraphService(fakeHttpClient.Object); 

// act 
var result = service.CreateUser(new UserModel { Email = "[email protected]", .......}); 

// assert 
result.Should().Be(true); 

私はのような統合テストを作成することを考えているようなインターフェースで

interface IADGraphService 
{ 
    bool CreateUser(UserModel model); 
    IList<UserModel> GetUsers(); 
    bool UpdateUser(UserModel model); 
    bool DeleteUser(string userObjectId); 
} 

をIADGraphServiceを作成しましたそのような場合に使用される?

+0

なぜ統合テストが必要なのか?それは良い見えます。 CreateUserが動作しないようにアレンジするだけです。 – Serghei

+0

@Sergheiは疑問に思っています。私はたくさんの記事を検索し、サードパーティのAPIが提供する結果を模倣すべきだと言いました。 –

+0

などのサードパーティ製APIをモックするならば、それは単体テストであり、私の日常業務ではIntegrations Testではありません。私は両方を使用します。あなたはそれについてここで読むことができますhttps://stackoverflow.com/questions/10752/what-is-the-difference-between-integration-and-unit-tests – Serghei

答えて

0

クラスADGraphServiceの動作をテストする必要がある場合は、Mocked HttpClientでUnit Testを使用する必要があります。 Webサービスとのテスト統合の場合は、クラスADGraphServiceにないHttpClientの統合テストを記述する必要があります。

1

良い戦略は、あなたが所有していないモック決してコードにあります。実際にAzure ADを呼び出す統合テストのレイヤーを用意し、意図したことを証明する必要があります。戦略については詳しく説明し

  • はあなたのコードが実際に必要となる操作のみを露出し、サードパーティのコードの周りに薄いラッパーを書きます。 (あなたはすでにあなたのADGraphService/IADGraphServiceでこれをやったように見えます。)あなたの薄いラッパー(ADGraphService)をテストし、その公共事業は本当にあなたがそれらをするつもりように動作しないことを証明
  • 書き込み統合テストを。
  • 次に、より高いレベルのオブジェクトをテストするときは、IADGraphServiceのモックを使用できます。ラップトップの動作を理解していることを(統合テストを介して)すでに証明しているので、賢明な動作を模擬することができます。

統合テストでは、まさに正しい軌道に乗っているように聞こえます。独自のインターフェイスを作成し、コードに必要な動作だけを公開しています。統合テストでは、これらの方法が実際にあなたが望むことを実証しています。マイクロソフトが急激な変化を遂げると、テストではあなたに伝えられます。

次に、より高いレベルのコード(IADGraphServiceを使用するコード)をテストするときは、IADGraphServiceが自分のコードであり、安全に偽装できるため、IADGraphServiceをモックアウトすることができます。

関連する問題