3

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 であることを示しますUserControllerWebActivatorglobal.asax はここでモックを介して呼び出されないため、初期化されていないことは明らかです。このコンテキストで成功するテスト シナリオを作成してWebApicontroller、データを含むユーザー オブジェクトを返すにはどうすればよいでしょうか。

4

1 に答える 1

3

Moqを使用していますか?

UoW.Usersプロパティのタイプがわからないため、適切にモックする方法をデモすることはできません (更新されたIRepository) が、それをモックし、GetAll メソッドをスタブ化して、ユーザーのサンプル リストを返す必要があります。

更新しました

        var userManager = new Mock<IUoW>();

        userManager.Setup(s => s.Users).Returns(()=> 
        { 
            var userReposisitory = new Mock<IRepository<Users>>();

            userReposisitory.Setup(ur => ur.GetAll()).Returns(()=> {
                var listOfUsers = new List<Users>();
                listOfUsers.Add(new Users { FirstName = "Example" });
                return listOfUsers.AsQueryable();
            });

            return userReposisitory.Object; 
        });

        var controller = new UserController(userManager.Object);
        var result = controller.Get();
        Assert.IsNotNull(result);
        Assert.IsTrue(result.Count() > 0);
于 2012-12-07T10:24:10.040 に答える