- 创建一个接口:
public interface IUserService {
User Get(int id);
IEnumerable GetAll();
}
- 创建一个实现IUserService接口的类:
public class UserService : IUserService {
public User Get(int id) {
// 从数据库中获取用户
// ...
}
public IEnumerable GetAll() {
// 从数据库中获取所有用户
// ...
}
}
- 在ApiController中注入IUserService:
public class UserController : ApiController {
private readonly IUserService _userService;
public UserController(IUserService userService) {
_userService = userService;
}
public IHttpActionResult Get(int id) {
var user = _userService.Get(id);
if (user == null) {
return NotFound();
}
return Ok(user);
}
public IHttpActionResult GetAll() {
var users = _userService.GetAll();
if (users.Any()) {
return Ok(users);
}
return NotFound();
}
}
- 创建一个MockUserService,实现IUserService接口:
public class MockUserService : IUserService {
public User Get(int id) {
// 从内存中获取用户
// ...
}
public IEnumerable GetAll() {
// 从内存中获取用户
// ...
}
}
- 在Nunit测试中使用MockUserService实例进行测试:
[TestFixture]
public class UserControllerTests {
[Test]
public void Get_Should_Return_User() {
// Arrange
var userService = new MockUserService();
userService.Add(new User { Id = 1, Name = "张三" });
var controller = new UserController(userService);
// Act
IHttpActionResult result = controller.Get(1);
// Assert
Assert.IsNotNull(result);
var content = result as OkNegotiatedContentResult;
Assert.IsNotNull(content);
Assert.AreEqual("张三", content.Content.Name);
}
[Test]
public void GetAll_Should_Return_All_Users() {
// Arrange
var userService = new MockUserService();
userService.Add(new User { Id = 1, Name = "张三" });