Unit testing przy użyciu Moq

0

Witam

Ucze sie moq i unit testów w ogole bedac na stazu. Dostalem zadanie aby napisac unit testy to pewnej funkcjonalnosci przy uzyciu moq, jednak dopiero zaczalem o tym czytac i nie wiem jak sie za to zabrac. Funkcjonalnosc jest następujaca: Mamy encje Device i Config. Kazdy Device moze miec kilka configów w tym jeden domyślny. Dla uproszczenia można je zobrazować tak:

Device
{
  Id,
  DefaultConfigName
}
Config
{
  Name,
  Description,
  DeviceId,
}

Device i Configi są powiazane kluczem skladanym (Id i Name). I teraz tak. Jest serwis, który ma metodę _service.AddConfig(Config cfg). Jesli config w parametrze ma wartosc Description null/empty string, to znaczy, ze dla tego name chcemy uzywac tej samej description, ktora ejst w configu domyslnym (performancowe kwestie). Serwisy maja oczywiscie powiazania pod spodem z repozytoriami. Czy ktos moglby mi pomoc napisac unit test pod podana funkcjonalnosc? Chodzi mi konkretnie o zamockowanie repo Setupem

0

Ogolnie to troche malo informacji, zeby Ci pomoc - zeby zmockowac repozytorium trzeba by znac przynajmniej jego interfejs, zeby wiedziec jakie metody i jak zmockowac (jakie maja parametry, co zwracaja).

W najprostszym przypadku setup robi sie, na przyklad, tak:

var mockedObject = new Mock<IMocked>();
mockedObject.Setup(m => m.MockedMethod()).Returns(new ObjectToReturn);
var sut = new SystemUnderTest(mockedObject.Object);

(pisane z palca, moga byc drobne bledy)

Polecam zajrzec na strone wiki Moq na githubie - tam jest duzo przykladow :)

0
anonymous13 napisał(a):

W najprostszym przypadku setup robi sie, na przyklad, tak:

var mockedObject = new Mock<IMocked>();
mockedObject.Setup(m => m.MockedMethod()).Returns(new ObjectToReturn);
var sut = new SystemUnderTest(mockedObject.Object);

Raczej

Mock<IMocked> mockedObject;
ServiceUnderTest sut;


// w metodzie [SetUp]
mockedObject = new Mock<IMocked>(MockBehavior.Strict);
sut = new ServiceUnderTest(mockedObject.Object); // nie system, tylko service


// w metodzie [TearDown]
mockedObject.VerifyAll();


// w metodzie testującej
var someModel = new SomeModel() { Field = someConstantValue };
mockedObject.Setup(m => m.MockedMethod()).Returns(someModel);

var result = sut.TestedMethod();

Assert.AreEqual(someModel, result);
// itp

1 użytkowników online, w tym zalogowanych: 0, gości: 1