Я написал следующий тест единицы на момент даты испытания форматирования:Почему Assert.AreEqual() не подходит для строки и DateTimeFormatter?
using System;
using Windows.Globalization.DateTimeFormatting;
using Microsoft.VisualStudio.TestPlatform.UnitTestFramework;
namespace MyTests
{
[TestClass]
public class DateTimeFormatterTests
{
[DataTestMethod]
[DataRow(2, 3, 2017, "en", "Thursday, March 2")]
[DataRow(2, 3, 2017, "de", "Donnerstag, 2. März")]
public void Long_date_without_year_should_match_expected(int day, int month, int year, string regionCode, string expected)
{
DateTimeFormatterformatter = new DateTimeFormatter("dayofweek month day", new[] { regionCode });
string actual = formatter.Format(new DateTime(year, month, day));
Assert.AreEqual(expected, actual);
}
}
}
Я не понимаю, почему утверждение не со следующей ошибкой:
{"Assert.AreEqual failed. Expected:<Thursday, March 2>. Actual:<Thursday, March 2>. "}
Является ли это потому, что строки имеют разные кодирование?
После преобразования обе строки в массив байтов с использованием UTF8, кодирующий содержание байтовых массивов выглядит следующим образом:
реально:
e2 80 8e 54 68 75 72 73 64 61 79 e2 80 8e 2c 20 e2 80 8e 4d 61 72 63 68 e2 80 8e 20 e2 80 8e 32
ожидается: 54 68 75 72 73 64 61 79 2c 20 4d 61 72 63 68 20 32
Каков тип 'актуальный'? –
Строки не имеют кодировки, кодирование вступает в игру, когда вы пытаетесь преобразовать строку в/из байтов. –
Попробуйте сравнить их как массивы байтов, начиная с 'Encoding.UTF8.GetBytes (фактического)' и аналогичного для ожидаемого, посмотрите, о чем он жалуется. –