2016-09-14 3 views
0

私はtdd開発の新機能として、初めてモックを試みましたが、同じことについては 疑問があります。TDDでテストするメソッドを呼び出すロジック

たとえば次の点を考慮

をここにビジネス

public class MyEmail 
{ 
    public bool SendEmail() 
    { 
      Email code goes here 
      return true; 
    } 
} 

Another class 

public class Customer 

{ 
    public bool Addcustomer() 
    { 
    MyEmail obj = new MyEmail(); 
    obj.SendEmail(); 
    return true; 
    } 
} 

はここAddcustomerのための私のテストを行く

[TestMethod()] 
public void AddCustomerTest() 
{ 
    Mock<Myemail> objemail = new Mock<Myemail>(); 

    objemail.Setup(x=>x.SendEmail()).Returns(true); 

customer obj = new Customer(); //私がテストしたい ので、顧客クラスの作成されたオブジェクトこのクラスに含まれるメトス。

今私の質問はここにありますか?

obj.AddCustomer(objemail.Object); 

上記を確認してください。 Customerクラス のメソッドをパラメータとともに呼び出しましたが、実際にはそのメソッドはどのパラメータも受け入れません。しかし、そのメソッドはコンパイルエラー またはランタイムエラーを受け取っていません。どのように可能ですか?

テストメソッドでのみ起きているのは、 であるべきで、理想的にはコンパイラが受け入れるべきではないからです。

さらに、クラスCustomerの私のAddcustomerメソッドがすでに以下のような定義を持つ であるとします。それから私はどうすればいいですか?私は私が正しくあなたを理解している場合はわからない

public bool Addcustomer(int Anynumber) 
    { 
    MyEmail obj = new MyEmail(); 
    obj.SendEmail(Anynumber)); 
    return true; 
    } 

    Assert.AreEqual(obj.AddCustomer(), true); 
} 

答えて

0

、何の問題があるが、ここではクラスを設定するためのより良い方法です:

public class Customer 
    { 
     private MyEmail _myEmail; 
     public void Customer(MyEmail myEmail) 
     { 
     _myEmail = myEmail; 
     } 

     public bool Addcustomer() 
     {  
     _myEmail.SendEmail(); 
     return true; 
     } 
    } 

[TestMethod()] 
public void AddCustomerTest() 
{ 
    Mock<Myemail> objemail = new Mock<Myemail>(); 

    objemail.Setup(x=>x.SendEmail()).Returns(true); 
    customer obj = new Customer(objemail.Object); 

    //Assert something 
} 
関連する問題