我使用.Net Core 2.0创建Web Api。我使用Active Directory图谱API(https://docs.microsoft.com/en-us/azure/active-directory-b2c/active-directory-b2c-devquickstarts-graph-dotnet)来执行创建新用户。我使用这样的接口
创建了IADGraphServiceinterface IADGraphService
{
bool CreateUser(UserModel model);
IList<UserModel> GetUsers();
bool UpdateUser(UserModel model);
bool DeleteUser(string userObjectId);
}
我正在考虑创建集成测试,如:
// arrange
var service = new ADGraphService();
// act
bool result = service.CreateUser(new UserModel(){ Email = "test@example.com", ..... });
var users = service.GetUsers();
// assert
result.Should().Be(true);
users.Should().Contain(user => user.Email == "test@example.com");
或者可能是这种界面的单元测试实现:
// 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 = "test@example.com", .......});
// assert
result.Should().Be(true);
这种情况应该使用哪一个?
答案 0 :(得分:3)
一个好的策略是永远不会模仿你不拥有的代码。你应该有一层实际上称为Azure AD的集成测试并证明它正在做你做的事情打算。
详细说明策略:
听起来像你一样,通过集成测试确定了正确的轨道。您正在编写自己的界面,并且只公开您的代码所需的行为。您的集成测试证明这些方法实际上符合您的意图 - 如果Microsoft做出重大更改,您的测试会告诉您。
然后,当您测试更高级别的代码(使用IADGraphService的代码)时,您可以模拟IADGraphService,因为它拥有您自己的代码,您可以安全地模拟它。
答案 1 :(得分:0)
如果您需要测试类ADGraphService的行为,则应使用Mocked HttpClient进行单元测试。对于与Web服务的测试集成,您应该在HttpClient上编写Integration测试,而不是在类ADGraphService上编写。