Как да се подиграете със създаването на нови обекти чрез Nunit - c #, nunit

Искам да напиша тест nunit, за да тествам метод, но не мога да се подиграя на обект, инстанцииран в този метод.

Ето кода:

public class Converter()
{
public void modifyScore(string convertTo){
ScoreConverter scoreConverter;
if(convertTo.Equals("decimal"){
scoreConverter = new DecimalScoreConverter();
scoreConverter.determineScore();
}
else{
scoreConverter = new IntegerScoreConverter();
scoreConverter.determineScore();
}
}

Искам да напиша тест за modifyScore и искам да тествам метода на обекта, който е извикал.

Как мога да тествам този метод с помощта на nunit?

Отговори:

0 за отговор № 1

Преди всичко трябва да започнете да работите срещу абстракциите. Мисля, че това е необходимо за всички мними рамки. От информацията, която ми даде, и няколко предположения:

Както и да е, тук отиваме:

public Interface IConverter
{
IScoreConverter ScoreConverter { get; set; };//use constructorinjection instead
void ModifyScore(string convertTo);
}

public Interface IScoreConverter
{
DetermineScore();
}

Бих препоръчал да погледнете MOQ,

Трябва да разберете какво искате да върнете от вътрешния обект. Засега не връщате стойност от ModifyScore, така че нямате какво да изпробвате.

Ако се върнете, напр. низ, тестът може да изглежда така:

var scoreConverterResponse = "theStringYouWantToBeReturned"

var scoreConverterMock = new Mock<IScoreConverter>();
scoreConverterMock.Setup(sc => sc.DetermineScore())
.Returns(scoreConverterResponse);

scoreConverterMock.Verify(sc => sc.DetermineScore(It.IsAny<string>()), Times.AtLeastOnce());

Определих методите за наименуване, т.е. методите CamelCase. Написах това в движение, затова се извинявам, ако има компилационни грешки.


-1 за отговор № 2

Тестовете на единиците се основават предимно на промяна на държавата. Така че естественият курс е:

  • Направи нещо в клас
  • Проверете дали състоянието на класа се е променило според очакванията

Може би можете да помислите за промяна в кода си, за да проверите вида на резултатаConverter:

public class Converter
{
public ScoreConverter scoreConverter { get; set; }

public void modifyScore(string convertTo){

if(convertTo.Equals("decimal"){
scoreConverter = new DecimalScoreConverter();
}
else{
scoreConverter = new IntegerScoreConverter();
}
scoreConverter.determineScore();
}

След това вашият тест може да изпълни метода modifyScore (), а след това Assert вида променлива за преобразуване на резултата.

Ако не искате да направите имота публичен, друга възможност е да го направите вътрешна и след това да добавите InternalsVisibleToAttribute, или може би да се използва Фабрика клас и след това се подиграват в теста, както изтъкна amcdermott.

Поздравления!


Свързани въпроси
Най - известен