2016-10-27 5 views
-1

私は単体テストの学習中ですが、現実の "現実世界"のプロジェクトにどのように適用するかについて少し混乱しています。チュートリアルでは、単純な単一クラスアプリケーションを使用しているように見えます。基本的な単体テストの処理を非常にシンプルにします。しかし、実際のn層プロジェクトに適用しようとすると、どこから始めるべきか分かりません。私はユニットテストを書くべきなのか分からないようです。例えば基本的な 'CreateUser'メソッドのユニットテスト

、ユーザ入力を受け入れ、有効な場合に、データベースへの書き込みは、簡単なアクションコントローラのメソッドやクラス:

public class RegisterViewModel 
{ 
    [Required] 
    [Display(Name = "UserName")] 
    [StringLength(8, MinimumLength = 4, ErrorMessage = "UserName must be between 4 and 8 characters.")] 
    public string UserName { get; set; } 

    [Required] 
    [EmailAddress] 
    [Display(Name = "Email")] 
    public string Email { get; set; } 

    [Required] 
    [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)] 
    [DataType(DataType.Password)] 
    [Display(Name = "Password")] 
    public string Password { get; set; } 

    [DataType(DataType.Password)] 
    [Display(Name = "Confirm password")] 
    [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")] 
    public string ConfirmPassword { get; set; } 
} 


[HttpPost] 
public ActionResult Register(RegisterViewModel newUser) 
{ 
    if (ModelState.IsValid) 
    { 
     _userRepository.AddNewUser(newUser); 
    } 
    else 
    { 
     return View(newUser); 
    } 

    return RedirectToAction("Approval"); 
} 

私は私はユニットテストを書く、あるいはすべきかを判断しようとしています上記の例のために書くことができる単位テストは何ですか?

  • アクションメソッドが正しいビューを返すことをテストしますか?
  • ユーザー入力が有効であることを確認する単体テストを書いていますか? MVC DataAnnotationsがそれをカバーすると仮定しますか?
  • 有効なユーザーをデータベースに書き込むのはどうですか?私は これをテストする(またはこれさえ可能であるべきでしょうか?私が行方不明です他に何

+1

ユニットが正しく機能することをテストするように努力する必要があります。その意味では、完全に機能するためには何をする必要があるかを決める必要があります。たとえば、ユニットが無効なユーザー作成(ユーザー名などの無効な文字)を拒否し、失格とする場合、それはテストするものです。基礎となるデータリポジトリを模倣し、有効なデータが与えられたときにユニットが実際に作成されたユーザを永続化しようとしていることをテストする必要があります。 –

答えて

0

私たちは、我々がテストしているかを知る必要があると思う。我々は、ユニットテストしている場合、私は別の器具を持っているでしょう

ユニットテストのシナリオでは、これはviewmodelのフィクスチャであり、検証が正しく機能していることを確認し、フィクスチャーを確認します。 Registerメソッドを所有するコントローラの場合

コントローラのアクションメソッドでは、ロジックの両方のブランチをテストする必要があります。だから、固定具に私は、このテストはモックフレームワークを使用してUserRepositoryをモックます

[Test] 
    public void should_redirect_to_aprroval_on_post_for_create() 
    { 
     //Assert 
     A.CallTo(() => _fakeUserRepository.Save(A<Athlete>.Ignored)); 
     //Act 
     var result = (RedirectToRouteResult) _sut.Create(new RegisterViewModel{}); 

     //Assert 
     Assert.That(result.RouteValues["action"], Is.EqualTo("Approval")); 
    } 

のテストを持っていると思います。ここでの構文は、私はその後、他のブランチ

[Test] 
    public void should_return_same_view_when_model_is_invalid_on_post_for_create() 
    { 
     //Arrrange 
     _sut.ModelState.AddModelError(String.Empty, String.Empty); 

     //Act 
     var result = (ViewResult) _sut.Create(new RegisterViewModel()); 

     //Assert 
     Assert.That(result.ViewName, Is.EqualTo(String.Empty)); 
     Assert.That(result.Model.GetType(), Is.EqualTo(typeof (RegisterViewModel))); 
    } 

あなたはさらに一歩進み、リターン・ビューからすべての値が正しいことを確認することができることをテストしますFakeItEasy

です。

私たちが模擬する必要がある依存関係を知るためには、コントローラのコンストラクタを含めるとよいでしょう。

(データベースに対するテスト)私はおそらく、実際のサイトとデータベースに対して実行されるSpecFlowとSeleniumで別のテストプロジェクトを作成します。