2017-06-05 9 views
1

単体テストを始めたばかりで、今は削除のテスト方法を書き留めています。私はJustMockを使用しています。以下では、コントローラの動作方法とテスト方法について述べましたが、テスト方法は機能していません。メソッドの戻り値は、常にfalseを返すことを保持していません。私がここで間違っていることについて私を案内してください。JustMock liteを使ってユニットを削除する方法をテストする方法

これはテスト方法です。

[TestMethod] 
    public void Delete_User() 
    { 
     Mapper.CreateMap<UserViewModel,User>(); 

     IStaticMembershipService membershipRepository = Mock.Create<IStaticMembershipService>(); 

     var mockUserViewModel = new UserViewModel { Id = 1}; 

     var mockUser = Mapper.Map<UserViewModel, User>(mockUserViewModel); 
     var UserRepository = Mock.Create<IUserRepository>(); 

     Mock.Arrange(() => UserRepository.DeleteUser(mockUser)).Returns(new OperationStatus { Status = true }).MustBeCalled(); 

     UserController controller = new UserController(UserRepository, membershipRepository); 
     ActionResult result = controller.Delete(mockUserViewModel); 

     Mock.Assert(() => UserRepository.DeleteUser(mockUser), Occurs.AtLeastOnce()); 
    } 

関連するすべてのコントローラ情報。

private IUserRepository _UserRepository; 
    private IStaticMembershipService _membershipService; 

    public UserController(IUserRepository UserRepo, IStaticMembershipService membershipService) 
    { 
     _UserRepository = UserRepo; 
     _membershipService = membershipService; 
    } 

リポジトリが正しく嘲笑されているが、「opStatus」プロパティが返されたばかり、私はのtestMethodにおける結果であると指定した値ではなく、常にfalseです。

public ActionResult Delete(UserViewModel usr) 
    { 
     var selectedUser = Mapper.Map<UserViewModel, User>(usr); 

     var opStatus = _UserRepository.DeleteUser(selectedUser); 
     if (!opStatus.Status) 
      throw new System.Web.Http.HttpResponseException(new HttpResponseMessage(HttpStatusCode.NotFound)); 

     return RedirectToAction("Index"); 
    } 

私は十分な情報を提供したと思います。どんな助けでも大歓迎です。

+0

テストセットアップ中の 'mockUser'とテスト中のメソッドの 'selectedUser'は異なるインスタンスですので、テスト中のメソッドが実行されるときには一致しません。 – Nkosi

+0

ここでtestメソッドを呼び出すときに、すべての引数を無視するように設定する以外は、この問題を解決する他の方法はありません。 –

答えて

0

変更:

Mock.Arrange(() => UserRepository.DeleteUser(mockUser)).Returns(new OperationStatus { Status = true }).MustBeCalled();

へ:それはmockUserとselectedUserは '同じ' であることを実現するよう

Mock.Arrange(() => UserRepository.DeleteUser(mockUser)).IgnoreArguments().Returns(new OperationStatus { Status = true }).MustBeCalled();

はまた、ユーザーに等価演算子を追加します。または、引数マッチングにラムダを使用してください( http://www.telerik.com/blogs/handling-arguments-in-justmock-arrangements参照)。

関連する問題