【发布时间】:2017-11-02 16:30:00
【问题描述】:
我使用 .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) 创建新用户。我用这样的接口创建了 IADGraphService
interface 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);
这种情况应该使用哪一种?
【问题讨论】:
-
如果您需要集成测试,为什么不呢?它看起来不错。只是 CreateUser 是安排的一部分而不是行动
-
@Serghei 只是想知道,这是最好的选择。我在 Google 上搜索了很多文章,他们告诉我应该模拟 3rd 方 API 提供的结果。
-
如果您要模拟 3rd 方 API,例如 WebService 等,那么在我的日常工作中,这将是一个单元测试而不是集成测试,我会同时使用它们。你可以在这里阅读stackoverflow.com/questions/10752/…
-
我稍微编辑了问题。我实际上有一个单元测试,并将其添加到我的问题中。问题是哪种情况更适合这种情况?单元测试还是集成测试?
-
第二个单元测试更好,因为您想测试我在下面回答的 ADGraphService 类的行为
标签: c# unit-testing asp.net-core integration-testing