2016-06-16 8 views
3

Я пытаюсь выполнить модульное тестирование с помощью xUnit.net. Мне нужен тест «Теория» с «[InlineData]», который включает в себя «десятичные знаки», :Имея фактическое десятичное значение в качестве параметра для атрибута (пример: [InlineData] xUnit.net

[Theory] 
[InlineData(37.60M)] 
public void MyDecimalTest(decimal number) 
{ 
    Assert.Equal(number, 37.60M); 
} 

Это невозможно, потому что вы не можете создать decimal as a constant я нашел обходной путь put the number in quotes Лик так "37.60" Это будет на самом деле превратить его в дубль, который сделает тест неудачу

Вопрос...:
Есть ли обходной путь для этого? нет, что является самым простым способом создания нескольких тестовых примеров для моего теста?

+3

Также см [Почему «десятичный» не является допустимым типом параметра атрибута?] (Http://stackoverflow.com/questions/3192833/) –

ответ

6

Вы должны иметь возможность использовать значение String в атрибуте и задать тип параметра Decimal, он, как я могу судить, автоматически преобразуется в тестовую структуру.

[Theory] 
[InlineData("37.60")] 
public void MyDecimalTest(Decimal number) 
{ 
    Assert.Equal(number, 37.60M); 
} 

Если это не сработает, вы можете вручную преобразовать его, передав параметр String.

[Theory] 
[InlineData("37.60")] 
public void MyDecimalTest(String number) 
{ 
    var d = Convert.ToDecimal(number); 
    Assert.Equal(d, 37.60M); 
} 
+0

Хорошая идея. Немного чище, чем отличить другое значение. Тем не менее, взломанный. –

+0

@TimPohlmann Я обновил свой ответ на основе дальнейших экспериментов, где тесты проходят на моей машине. – DaveShaw

+1

Да, это работает. Я попробовал это раньше, но у меня другая проблема, и я просто предположил, что она превратила ее в двойную. Виноват. Благодаря! –