2017-03-16 16 views
1

私はmoqオブジェクトを使って単体テストを開始しました。これが正しいかどうかは分かりません。ここユニットテストでmoqを使用することができません

Public Class Mrr: IMrr 
{ 

    public int Delete(double obj) 
    { 
     int rtcode = somefunction(obj);// retreiving some code from function 
     int DeleteMrr= DeleteFunction(rtcode); // delete function executes here   
     return 0; 
    } 

} 

はインターフェース

public interface IMrr 
{ 
    int Delete(double obj); 
} 

で、私の試験方法は、このようなものです。

[TestMethod()] 
public void RetrieveSaveDeleteMRR() 
{  
    var FakeObject = new Moq.Mock<IMrr>(); 
    FakeObject.Setup(x => x.Delete(It.IsAny<int>())).Returns(0); 
    var Res = FakeObject.Object.Delete(10); 
} 

これは実際にそのメソッドを実行することにはなりませんが、メソッドに移動するかどうかを判断する必要があります。私はわかりません。

答えて

1

Mrr.Delete()メソッドをテストする場合は、Mrrをモックしないでください。 Mrrクラスの実際のインスタンスを作成し、そのメソッドを呼び出す必要があります。

通常、実際の依存関係メソッドが呼び出されないように、Mrr依存関係(あなたの例では存在しません)を模擬したいと思っています。

注:インターフェイスIMrrからMrrを継承することを忘れました。

+0

HI、 私は私のコードを編集し、あなたはここで話している実際の依存関係がどのようなものを教えてくださいできますか? –

+0

この基本的なMoqのチュートリアルを確認してください - http://deanhume.com/home/blogpost/basic-introduction-to-writing-unit-tests-with-moq/16 – CodeFuller

+0

は実装に必要なインターフェースですか? –

1

例では、クラスMrrには依存性がありません。依存関係を説明するには、次の例を参照してください。

public class Mrr: IMrr 
{ 
    // This is dependency 
    IDelete _deleteObject; 

    public Mrr(IDelete deleteObject) 
    { 
     _deleteObject = deleteObject; 
    } 

    public int Delete(double obj) 
    { 
     int rtcode = somefunction(obj); 
     int DeleteMrr = _deleteObject.DeleteFunction(rtcode); 
     return 0; 
    } 
} 

public interface IDelete 
{ 
    int DeleteFunction(int rtcode); 
} 

この依存関係はコンストラクタで渡されるため、テストで独自の模擬インスタンスを提供できます。

このような状況と比較する:

public class Mrr: IMrr 
{ 
    // This is dependency 
    IDelete _deleteObject; 

    public Mrr() 
    { 
     _deleteObject = new DeleteClass(); 
    } 
} 

毎回newは、それがユニットテストに独自の実装を注入することは不可能になり使用されています。

テストは次のようになります。

[TestMethod] 
public void RetrieveSaveDeleteMRR() 
{  
    // Arange 
    int expected = 1; 
    Moq.Mock<IDelete> deleteObjectMock = new Moq.Mock<IDelete>(); 
    deleteObjectMock.Setup(x => x.DeleteFunction(It.IsAny<int>())).Returns(1000); 
    Mrr testedObject = new Mrr(deleteObjectMock.Object); 

    // Act 
    int actual = testedObject.Delete(10); 

    // Assert 
    Assert.AreEqual(expected, actual); 
} 
関連する問題