2016-07-08 7 views
-3
x(string)= y(string) != ? y : string.empty 

Как получить покрытие кода 100% для выше линии, используя Assert заявлениеЗаявление о подтверждении для тернарного оператора в Rhino mocks?

Мы пытались с помощью: Assert.AreEqual (Actualvalue, ExpectedValue); , но нам недостает кода покрытия где-то

+2

Не могли бы вы добавить ** настоящий ** код? Код, который вы предоставили, даже не компилируется! Кроме того, 100% охват кода не должен быть целью только ради самого себя. Каковы варианты использования и/или требования, которые необходимо проверить? –

+0

Извините, мы не можем предоставить реальный код для решения проблемы соответствия, но мы просто хотим знать, как мы можем покрыть тернарный оператор, используя утверждение assert под кодом. Кроме того, в соответствии с нашим вариантом использования мы должны покрывать его по охвату кода. –

+2

В основном вам нужны два тестовых случая для покрытия 100%, один для состояния 'y! = ...' pass и один для него. Однако в зависимости от того, какое это условие, вам, возможно, придется добавить больше случаев. Поэтому либо реализуйте два тестовых метода, либо создайте их, и примените атрибут 'TestCase' с параметром' Result'. – HimBromBeere

ответ

1

В принципе, если весь ваш код равен x = y != ... y : string.empty, вам нужны два тестовых примера для проверки, один для прохождения состояния и один для отказа.

Это может быть достигнуто двумя способами. Можно было бы создать тест-метод для каждого случая:

string MethodToTest(string y) { 
    return y != /* whatever your condition is */ ? y : string.empty 
} 
[Test] 
public void Test1() { 
    Assert.AreEqual(MethodToTest("PassingCondition"), "PassingCondition"); 
} 
[Test] 
public void Test2() { 
    Assert.AreEqual(MethodToTest("NotPassingCondition"), string.empty); 
} 

Другой путь был бы создать один метод и добавить TestCase атрибута по этому:

[TestCase("PassingCondition", Result = "PassingCondition")] 
[TestCase("NotPassingCondition", Result = string.empty)] 
public bool TheTest(string y) { 
    return MethodToTest(y); 
} 

Однако оба appraoches равны в средствах покрытия кода. Это зависит от фактического состояния того, как вы достигаете покрытия кода. Но вы не обеспечили фактическое условие, которое не позволило нам ответить на этот конкретный вопрос.

EDIT: Как вы также предоставили Rhino-mocks (который я не знаком) Я предполагаю, что вы проходите, поскольку условие возвращается методом, который вы хотите высмеять. Таким образом, издевайтесь над этим методом, возвращая условие прохождения, и один возвращает условие сбоя.

+0

фактически мы используем Rhino Mock для тестирования, а атрибуты, которые вы использовали в образце, - Nunit.Вместо этого мы использовали тот же процесс, который был предоставлен в первом методе, но мы не можем получить полный охват кода. –

+0

Я не знаю, знает ли rhino '' TestCase' -трибут, однако вы все равно можете использовать первый подход с ' [TestMethod] 'вместо' [Test] '. – HimBromBeere

+2

FYI - Rhino Mocks предназначен для насмешек, а не для атрибутов теста. NUnit, XUnit, MSTest и т. Д. Содержат тестовые атрибуты, такие как TestCase, Test и т. Д., Хотя и разные, в зависимости от того, какой из них вы используете. Вот сравнение тестовых фреймворков: https://xunit.github.io/docs/comparisons.html –

1

Вы действительно не должны стремиться к 100% -ному охвату кода, если это все, что вы делаете. Единичные тесты, которые плохо тестируют, - это трата времени и ремонтопригодности.

Для полного испытания (100%) тройного оператора вам необходимо проверить все условия.

Рассмотрим простую логическую переменную 'isMorning', которая, когда true возвращает «Утро», а false возвращает «Вторая половина дня». Вам нужно будет написать тест, для которого «isMorning» установлен как «true», и, следовательно, ожидаемым результатом является «Morning», затем еще один тест, который имеет «isMorning», установленный на «false», и, следовательно, ожидаемый результат - «Вторая половина дня».

public void Test1() { 
    var isMorning = true; 
    var result = isMorning ? "Morning" : "Afternoon"; 
    Assert.AreEqual("Morning", result); 
} 

public void Test2() { 
    var isMorning = false; 
    var result = isMorning ? "Morning" : "Afternoon"; 
    Assert.AreEqual("Afternoon", result); 
} 

Надеюсь, это поможет.

FYI - Если вы используете что-то вроде JetBrains DOTCOVER, он будет выделять не проверенный код.

 Смежные вопросы

  • Нет связанных вопросов^_^