Вот мой уточненный вариант первого ответа. Я надеюсь, что это полезно.
/// <summary>
/// Converts an <see cref="int"/> to its textual representation
/// </summary>
/// <param name="num">
/// The number to convert to text
/// </param>
/// <returns>
/// A textual representation of the given number
/// </returns>
public static string ToText(this int num)
{
StringBuilder result;
if (num < 0)
{
return string.Format("Minus {0}", ToText(-num));
}
if (num == 0)
{
return "Zero";
}
if (num <= 19)
{
var oneToNineteen = new[]
{
"One",
"Two",
"Three",
"Four",
"Five",
"Six",
"Seven",
"Eight",
"Nine",
"Ten",
"Eleven",
"Twelve",
"Thirteen",
"Fourteen",
"Fifteen",
"Sixteen",
"Seventeen",
"Eighteen",
"Nineteen"
};
return oneToNineteen[num - 1];
}
if (num <= 99)
{
result = new StringBuilder();
var multiplesOfTen = new[]
{
"Twenty",
"Thirty",
"Forty",
"Fifty",
"Sixty",
"Seventy",
"Eighty",
"Ninety"
};
result.Append(multiplesOfTen[(num / 10) - 2]);
if (num % 10 != 0)
{
result.Append(" ");
result.Append(ToText(num % 10));
}
return result.ToString();
}
if (num == 100)
{
return "One Hundred";
}
if (num <= 199)
{
return string.Format("One Hundred and {0}", ToText(num % 100));
}
if (num <= 999)
{
result = new StringBuilder((num / 100).ToText());
result.Append(" Hundred");
if (num % 100 != 0)
{
result.Append(" and ");
result.Append((num % 100).ToText());
}
return result.ToString();
}
if (num <= 999999)
{
result = new StringBuilder((num / 1000).ToText());
result.Append(" Thousand");
if (num % 1000 != 0)
{
switch ((num % 1000) < 100)
{
case true:
result.Append(" and ");
break;
case false:
result.Append(", ");
break;
}
result.Append((num % 1000).ToText());
}
return result.ToString();
}
if (num <= 999999999)
{
result = new StringBuilder((num / 1000000).ToText());
result.Append(" Million");
if (num % 1000000 != 0)
{
switch ((num % 1000000) < 100)
{
case true:
result.Append(" and ");
break;
case false:
result.Append(", ");
break;
}
result.Append((num % 1000000).ToText());
}
return result.ToString();
}
result = new StringBuilder((num / 1000000000).ToText());
result.Append(" Billion");
if (num % 1000000000 != 0)
{
switch ((num % 1000000000) < 100)
{
case true:
result.Append(" and ");
break;
case false:
result.Append(", ");
break;
}
result.Append((num % 1000000000).ToText());
}
return result.ToString();
}
Если ваш плагин является плагином RCP (Rich Client Platform) с SWT, вы можете использовать SWTBot .
Этот тест может быть инкапсулирован в JUnit one:
Если ваши плагины основаны на OSGi, вы должны знать, что пакет OSGi запускает собственный загрузчик классов, и поэтому классы, похоже, не находятся в одном пакете.
См. « OSGi - враг тестов JUnit? »
Сделайте свой тестовый плагин фрагментом .
Одна из проблем заключается в том, что другие плагины не могут получить доступ к классам, определенным во фрагментах (как указывает Патрик Полин в более подробном обсуждении фрагментов в модульных тестах ).
Другая проблема заключается в том, что игнорируетсяplugin.xml
во фрагменте. И поэтому тестируемый плагин не может внести свой вклад
Из статьи Патрика:
Фрагменты снаружи очень похожи на плагин. Он представлен как отдельный проект в вашем рабочем пространстве, он содержит манифест, описывающий его содержимое, он построен и развернут как jar. Что отличает фрагмент, так это то, что он передает свои ресурсы во время выполнения одному подключаемому модулю хоста. Поэтому классы во фрагменте загружаются загрузчиком классов подключаемого модуля хоста.
Размещая наши модульные тесты во фрагментах, мы можем предоставить нашим тестам доступ к закрытым методам тестируемых классов. Кроме того, поскольку исходный код и тестовый код фактически являются частью одного и того же подключаемого модуля, нет проблем, связанных с неэкспортированными пакетами. Классы тестов будут иметь доступ ко всем пакетам в подключаемом модуле, независимо от того, экспортируются они или нет.
Главный недостаток этого подхода на основе фрагментов состоит в том, что трудно агрегировать модульные тесты в основной набор тестов. Хотя легко создать набор тестов, включающий тесты внутри фрагмента, не так просто создать набор, включающий тесты в нескольких фрагментах.
Если вашим подключаемым модулям требуется только простое тестирование, JUnit test Достаточно набора
Создайте новый тестовый набор BookTest в пакете test.yourpackage, щелкните правой кнопкой мыши пакет и выберите «
Создать> Тестовый набор JUnit
».