2017-09-26 12 views
0

最近私は単体テストをたくさん行っています。私はMoqライブラリからMock.Of<T>メソッドを発見しました。 thisと最終的にはthatを読んだ後、Mock.Ofは模擬インターフェイスのインスタンスを作成するのに最適ですが、newというキーワードでオブジェクトを自分で作ることはできますか?一部のNunitチュートリアルではそのアプローチを使用していますが、私はそれが何らかの形で役に立たないため、私は混乱します。Moq Mock.Of <Obj>対新しいObj();

Person newPerson = new Person() { Name = "David", Surname = "Smith" }; 
    Person mockedPerson = Mock.Of<Person>(o => o.Name == "David" && o.Surname == "Smith"); 

これら2つのオブジェクトには違いがありますか?この場合、Mock.Ofには何らかの利点がありますか、またはクラスの新しいインスタンスを作成するために、通常のnewキーワードを使用する必要がありますか?

答えて

2

あなたが見せてくれたコードが、完全に嘲笑の念を逃していると思います。 実際のオブジェクトを作成する必要がないように、Mockingはインターフェイスと抽象クラスで動作するはずです。それともオブジェクトのモックを作成するか

したがって、Mock.Of<Person>を実行してテストに必要な値を割り当てることができますが、最初にオブジェクトを作成してから作成してくださいそれの嘲笑。

は、あなたがこのようなコードがあるとします。

public interface IPerson 
{ 
    some method and property signatures 
} 

、あなたは

public class Person : IPerson 
{ 
    some code here 
} 

は今、あなたは、あなたのような何かを行うことができ、パラメータ

としてIPersonを取る方法を持っていると想像しています。

var mockedPerson = Mock.Of<IPerson>(); 
mockedPerson.Age = 27; 

int age = GetAge(mockedPerson); 
Assert.AreEqual(age, 27) 

実際のオブジェクトのモックを作成することは私には意味がありません。

+0

はい私は全くあなたに同意します。なぜ私はこのアプローチをいくつかのチュートリアルで見たときに混乱してしまいました。それが私がこの質問にここで来た理由です。残念ながら私はソースを失ってしまったので、私はそれらのチュートリアルを指すことができません – Erexo

関連する問題