У меня есть тестовый класс, который в какой-то момент локализует строку с использованием
GetString(IStringLocalizer, String, Object[])
Метод расширения
Следующее будет работать за исключением тестирования
public class ClassToTest
{
private readonly IStringLocalizer<SharedResource> _localizer;
public AnalyticsLogic(IStringLocalizer<SharedResource> localizer)
{
_localizer = localizer;
}
public async Task<string> SomeMethod()
{
return _localizer.GetString("key", DateTime.Today)); // "My Date: 31.10.2018" - will return null when testing
}
public async Task<string> SomeMethod2()
{
return _localizer.GetString("key"); // "My Date: {0:d}"
}
}
Вот как я построил свой тест:
public class ClassToTestTest
{
private readonly ClassToTest _testee;
private readonly Mock<IStringLocalizer<SharedResource>> _localizerMock = new Mock<IStringLocalizer<SharedResource>>();
public ClassToTestTest()
{
_testee = new ClassToTest(_localizerMock.Object);
_localizerMock.Setup(lm => lm["key"]).Returns(new LocalizedString("key", "My Date: {0:d}"));
}
[Fact]
public async Task SomeMethod()
{
var result = await _testee.SomeMethod();
Assert.Equal($"My Date: {new DateTime(2018, 10, 31):d}", result);
}
[Fact]
public async Task SomeMethod2()
{
var result = await _testee.SomeMethod2();
Assert.Equal("My Date: {0:d}", result);
}
}
Запуск теста завершится ошибкой:
SomeMethod () не удалось
- Ошибка Assert.Equal ()
- Ожидается: моя дата: 31.10.2018
- Факт: (ноль)
Обычно я бы просто предположил, что Метод GetString(IStringLocalizer, String, Object[])
не может обрабатывать строки формата, но, поскольку я использую его в продуктивной среде, и он работает, я понятия не имею, как это можно исправить. Мне кажется, что я правильно высмеял зависимость _localizer
. В противном случае GetString(IStringLocalizer, String)
не вернет строку формата.
Edit:
Для уточнения:
- Тест
SomeMethod()
не пройдёт
- Тест
SomeMethod2()
будет успешным