2016-05-18 3 views
0

Мне нужно кодировать/декодировать строку алгоритмом «Gaderypoluki». Все работает, если я сделаю это в моем собственном решении, код:Единичный тест алгоритма «Gaderypoluki»

using System; 
using System.Linq; 
using System.Text; 

namespace algorithm 
{ 
    public class Gaderypoluki 
    { 
     public static Tuple<string, int[]> Encode(string key, string toEncrypt) 
     { 
      int[] iterations = new int[] { 0, 0, 0, 0, 0, 0 }; 
      if (key.Length % 2 == 0) 
      { 
       if (key.Length == key.Distinct().Count()) 
       { 
        var encodedText = new StringBuilder(toEncrypt); 
        for (int i = 0; i < toEncrypt.Length ; i++) 
        { 

         for (int j = 0; j < key.Length; j += 2) 
         { 

          if (key[j] == toEncrypt[i]) 
          { 
           encodedText[i] = key[j + 1]; 
           iterations[j/2] += 1; 

          } 
          else if (key[j+1] == toEncrypt[i]) 
          { 
           encodedText[i] = key[j]; 
           iterations[j/2] += 1; 
          } 
         } 
        } 

        return Tuple.Create(encodedText.ToString(), iterations); 
       } 
       else throw new ArgumentException("Key cannot contain the same chars"); 
      } 
      else throw new ArgumentException("You have to put a key which is dividable by 2"); 
     } 



     static void Main(string[] args) 
     { 
      var key = "gaderypoluki"; 
      var encodedText = "gug mg iptg"; 
      try 
      { 
       Console.WriteLine(Encode(key, encodedText).Item1); 
       Console.ReadLine(); 
      } 
      catch (ArgumentException ex) 
      { 
       throw ex; 
      } 
     } 
    } 
} 

В этом случае решение мейды все хорошо. Результат будет «ala ma kota», так что это хороший результат. Но проблема начинается, когда я хочу, чтобы проверить его с помощью функции автоматического тестирования, таких как:

using Microsoft.VisualStudio.TestTools.UnitTesting; 
using System; 

namespace algorithm 
{ 
    [TestClass] 
    public class GaderypolukiTests 
    { 
     [TestMethod] 
     public void TestMethod1() 
     { 
      var key = "GADERYPOLUKI"; 
      var encodedText = "gug mg iptg"; 
      var expectedText = "ala ma kota"; 
      Tuple<string, int[]> actual = Gaderypoluki.Encode(key, encodedText); 


      Assert.AreEqual(expectedText.ToLower(), actual.Item1.ToLower()); 
     } 
    } 
} 

Теперь, если я начну тест, метод Encode() не делает совершенно ничего. При отладке, даже если if (key[j] == toEncrypt[i]) равно, компилятор говорит, что это не так и продолжается. Я действительно не знаю, почему, много искал эту проблему, но эта проблема еще не решена (или я мог бы искать лучше). Спасибо за помощь!

ответ

1

Ваша проблема в тестовом модуле, вы определяете, как key"GADERYPOLUKI" и в вашей реализации вы key[j] == toEncrypt[i], который чувствителен к регистру. Это работает в вашем приложении, потому что вы определяете key во всех нижних регистрах. Так как:

  • Обнови свой тест, чтобы иметь ключ быть в нижнем регистре
  • Update вашей реализации сделать регистрозависимости Сравнения
-1

принимать во внимании, различие между тестом и при методе испытания.

В тестовом методе

var key = "GADERYPOLUKI"; 

Ваш тест

var key = "gaderypoluki"; 

C# увидеть различия между прописными и строчными буквами;) просто добавить key.ToLower();

Ссылка: https://github.com/MrSwistak/GaderypolukiTestProject

+0

Хотя эта ссылка может ответить на этот вопрос, то лучше включить основные части ответа здесь и предоставить ссылку для справки. Ответные ссылки могут стать недействительными, если связанная страница изменится. - [Из обзора] (/ review/low-quality-posts/14406240) –

+0

Спасибо за эти подсказки;) В следующий раз я буду придерживаться этих правил – DawidK

Смежные вопросы