Мне трудно понять это. Я пишу тест Unit, который проверяет, что MD5, который показывает сайт, соответствует фактическому MD5 файла. Я делаю это, просто захватывая, что показывает страница, а затем вычисляет мой собственный MD5 файла. Я получаю текст на странице, используя Selenium WebDriver.То же строковое содержимое, но разная длина
Как и ожидалось, строки отображаются как то же самое ... или это, кажется
Когда я пытаюсь проверить две строки с помощью Assert.AreEqual
или Assert.IsTrue
, не выйдет из строя, независимо от того, как я пытаюсь сравнить их
Я попытался следующие способы:
Assert.AreEqual(md5, md5Text); //Fails
Assert.IsTrue(md5 == md5Text); //Fails
Assert.IsTrue(String.Equals(md5, md5Text)); //Fails
Assert.IsTrue(md5.Normalize() == md5Text.Normalize()); //Fails
Assert.AreEqul(md5.Normalize(), md5Text.Normalize()); //Fails
сначала я думал, что струны были актуальны разные, но, глядя на них в отладчике показывает, что бо й строка точно так же
Так что я пытался смотреть на их длину, что, когда я увидел, почему
Струны разные lengths..so Я попытался подстроками в md5
переменного соответствуют размеру переменной md5Text
. Мое мышление здесь было, возможно, у md5
была пучка из 0 символов ширины. Однако делать это избавилась от половины md5
СОО, это должно означать их в разных кодировках правильно? Но не будет Normalize()
исправить это?
Это как переменная md5
создается
string md5;
using (var stream = file.Open()) //file is a custom class with an Open() method that returns a Stream
{
using (var generator = MD5.Create())
{
md5 = BitConverter.ToString(generator.ComputeHash(stream)).Replace("-", "").ToLower().Trim();
}
}
и это, как переменная md5Text
создается
//I'm using Selenium WebDrvier to grab the text from the page
var md5Element = row.FindElements(By.XPath("//span[@data-bind='text: MD5Hash']")).Where(e => e.Visible()).First();
var md5Text = md5Element.Text;
Как я могу сделать этот тест пройти? как это должно быть прохождение (с они то же самое)
UPDATE:
Комментарии предложил мне включить строки в полукокса [] и итерацию над ним.Вот результаты этого (http://pastebin.com/DX335wU8) и код, который я добавил, чтобы сделать это
char[] md5Characters = md5.ToCharArray();
char[] md5TextCharacters = md5Text.ToCharArray();
//Use md5 length since it's bigger
for (int i = 0; i < md5Characters.Length; i++)
{
System.Diagnostics.Debug.Write("md5: " + md5Characters[i]);
if (i >= md5TextCharacters.Length)
{
System.Diagnostics.Debug.Write(" | Exhausted md5Text characters..");
}
else
{
System.Diagnostics.Debug.Write(" | md5Text: " + md5TextCharacters[i]);
}
System.Diagnostics.Debug.WriteLine("");
}
Одна вещь, которую я нашел интересным является то, что массив md5 символ имеет кучу случайных символов внутри него каждые 2 буквы
Изучите 'var contents = md5.ToCharArray()' в отладчике и посмотрите, где/какие дополнительные байты. –
Что произойдет, если вы перечислите оба символа char char и сравните их? –