При выполнении теста своего метода, для заполнения Dictionary , он полностью забивает память. Тест не может остановиться
Подскажите ошибку в коде. Мне необходимо создать Dictionary и заполнить её странами с ключом это код страны , например RU, а значение это наименование Россия. Я использую RegionInfo, CultureInfo , просто прохожусь циклом и идет заполнение. Второй метод , принимает текст и ищет там коды стран , после чего должен вывести их значения. Пробую использовать xUnit (первый раз, нету опыта с ним) , когда запускаю метод , то он просто бесконечно грузит и в итоге переполняет память , что все виснет.
Тест:
public class UnitTest1
{
[Fact]
public void ItShould_UnderTesting()
{
//Arrange
var sut = new CountriesFilter();
//Act
var d = sut.Text_Regul("gh bbff swvw'RU', 'DE' ggg ");
//Assert
Assert.NotNull(d);
}
Код:
public class CountriesFilter
{
public static IDictionary<string, string> GettingTextReg()
{
var allCultures = CultureInfo.GetCultures(CultureTypes.SpecificCultures);
var codeandname = new Dictionary<string, string>(allCultures.Length);
foreach(var i in allCultures)
{
RegionInfo regionInfo = new RegionInfo(i.Name);
if (codeandname.Count(x => x.Key == regionInfo.TwoLetterISORegionName) == 0)
{
codeandname.Add(regionInfo.TwoLetterISORegionName, regionInfo.DisplayName);
}
}
return codeandname;
}
public List<string> Text_Regul(string text)
{
List<string> coun = null;
try
{
var list = GettingTextReg();
string pattern = string.Format("\'({0})\'", string.Join("|", list.Keys));
Match mat = Regex.Match(text, pattern);
coun = new List<string>();
while (mat.Success)
{
coun.Add(mat.Value);
}
} catch(ArgumentNullException e)
{
throw new ArgumentNullException(e.Message);
}
return coun;
}
}
}
Ответы (1 шт):
Автор решения: VladD
→ Ссылка
while (mat.Success)
{
coun.Add(mat.Value);
}
— это бесконечный цикл. Вы всё время добавляете одно и то же значение, ничего не меняется между итерациями.
Вероятно, вы хотели написать
foreach (Match mat in Regex.Matches(text, pattern))
{
coun.Add(mat.Value);
}