Apicontroller
作業単位オブジェクトに依存している があります。ApiController
コンストラクターで実装された作業単位に依存するモッキング用のテスト ケースの作成方法ApiController
。
コードは次のとおりです。
APIコントローラー:
public class UserController : ApiController
{
public IUoW UoW { get; set; }
// GET api/user
public UserController(IUoW uow)
{
UoW = uow;
}
public IEnumerable<Users> Get()
{
return UoW.Users.Getall();
}
}
テストケース:
[TestMethod]
public void TestApiController()
{
var userManager = new Mock<IUoW>();
userManager.Setup(s => s.Users);
var controller = new UserController(userManager.Object);
var values = controller.Get();
Assert.IsNotNull(values);
}
ここUoW.Usersで言及されているユーザークラスは
public class UoW:IUoW,IDisposable
{
private MvcWebApiContext DbContext { get; set; }
protected IRepositoryProvider RepositoryProvider { get; set; }
private IRepository<T> GetStandardRepo<T>() where T : class
{
return RepositoryProvider.GetRepositoryForEntityType<T>();
}
public IRepository<Users> Users
{
get { return GetStandardRepo<Users>(); }
}
}
Users
クラス自体は
[Table("UserProfile")]
public class Users
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int UserId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string UserName { get; set; }
public string Password { get; set; }
[DataType(DataType.PhoneNumber)]
public long Mobile { get; set; }
}
テスト ケースをデバッグしようとすると、テスト ケースはオブジェクトUoW.Users
が で null であることを示しますUserController
。WebActivator
global.asax はここでモックを介して呼び出されないため、初期化されていないことは明らかです。このコンテキストで成功するテスト シナリオを作成してWebApicontroller
、データを含むユーザー オブジェクトを返すにはどうすればよいでしょうか。