2017-04-01 4 views
1

はのは私が似別のプロジェクトでテストしたいユニットの入力を読み取り、コンソールに書き込みコンソールプログラムをテストする方法

using System; 

public class Solution 
{ 
    public static void Main(string[] args) 
    { 
     int[] arr = Array.ConvertAll(Console.ReadLine().Split(' '), int.Parse); 
     Array.Sort(arr); 
     Console.WriteLine(string.Join(" ", arr)); 
    } 
} 

のような単純なプログラムがあるとしましょう

[TestMethod] 
public void TwoNumbersDescendingAreSwapped() 
{ 
    string input = "2 1"; 
    string expectedOutput = "1 2"; 
    // ... ??? 
    Assert.AreEqual(expectedOutput, actualOutput); 
} 

ソリューションから.exeを実際に使用せずにこれを行うことは可能ですか?

+1

_ "ソリューションからの.exeを実際に使用しないでください" _ - それはどういう意味ですか?どのようにして.exeを使用せずに.exeのコードをテストするつもりですか?コードをテストするには少なくとも2つの方法があると思いますが、どちらもコードを使用する必要があります。コードを使用せずにコードをどのようにテストするのか分かりませんので、意味を明確にする必要があります。注目すべきは、あなたの質問が理解できるものであっても、それはあまりにも広範で、「それは可能ですか?質問はです。あなたは何か_try_する必要があり、あなたが立ち往生したときに質問をします。 –

+0

はい、TypeMockアイソレータまたはMicrosoft Fakesを使用すると可能です。あなたはVSのエンタープライズ版を持っている場合、偽のために、 – zaitsman

答えて

9
は、それ自身のクラスとメソッドに Main()ですべての作業を行うコードを移動し

public static class InputConverter 
{ 
    public static string ConvertInput(string input) 
    { 
     int[] arr = Array.ConvertAll(input.Split(' '), int.Parse); 
     Array.Sort(arr); 
     return string.Join(" ", arr);   
    } 
} 

あなたMain()その後、次のようになります。

public static void Main(string[] args) 
{ 
    var input = Console.ReadLine(); 
    var output = InputConverter.ConvertInput(input); 
    Console.WriteLine(output); 
} 

あなたがテストConvertInput()できるようになりましたことにより、依存せずConsoleの書き込みおよび読み出し機能:

[TestMethod] 
public void TwoNumbersDescendingAreSwapped() 
{ 
    // Arrange 
    var input = "2 1"; 
    var expectedOutput = "1 2"; 
    // Act 
    var actualOutput = InputConverter.ConvertInput(input); 
    // Assert 
    Assert.AreEqual(expectedOutput, actualOutput); 
} 

脇に:引数を渡す方法は、入力が常に期待どおりであることを保証しているかのようです。ユーザーが整数の文字列表現とまったく異なるものを渡すとどうなりますか? InputConverter.ConvertInput()の入力を検証し、それに基づいて適切な行動コースを作成する必要があります(Exceptionを返す、返信null、後の処理によって異なります)。これらのシナリオを単体テストして、すべてのケースで期待どおりにConvertInput()が実行されるようにする必要があります。

+0

ハを提供して幸せ。あなたは私にこれを打つ。いい答え。 –

+0

@ JordanS.Jonesは私よりも頻繁に起こります! :)ありがとう。 – trashr0x

関連する問題