Как бы я протестировал этот метод c #, который использует консоль? - PullRequest
0 голосов
/ 05 февраля 2019

Как бы я протестировал этот метод в коде?Мне просто нужно поместить значение во входы, которые у меня есть, или что-то еще?Он должен проверить работу ISD, проверив, правильно создав песню с правильными деталями

static Song InputSongDetails()
{
    Console.WriteLine("What is the name of your song");
    string name = Console.ReadLine();

    Console.WriteLine("What is the artists name");
    string artist = Console.ReadLine();

    int records;
    Console.WriteLine("How many records did it sell");
    while (!int.TryParse(Console.ReadLine(), out records) || records < 0)
    {
        Console.WriteLine("That is not valid please enter a number");
    }
    return new Song(name, artist, records);
}

Ответы [ 3 ]

0 голосов
/ 05 февраля 2019

Есть два способа проверить вход и / или метод.

после каждого ввода вывести результат Console.WriteLine (MyVar)

static Song InputSongDetails()
{
    Console.WriteLine("What is the name of your song");
    string name = Console.ReadLine();
    Console.WriteLine(name)

    Console.WriteLine("What is the artists name");
    string artist = Console.ReadLine();
    Console.WriteLine(artist)

    int records;
    Console.WriteLine("How many records did it sell");
    while (!int.TryParse(Console.ReadLine(), out records) || records < 0)
    {
        Console.WriteLine("That is not valid please enter a number");
    }
    Console.WriteLine(records)
    return new Song(name, artist, records);
}

Вы также можете разделить методдля ввода параметров, которые вы уже проверили.

static Song InputSongDetails(string name,string artist, int records)
    {
        return new Song(name, artist, records);
    }

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

Пожалуйста, прочитайте https://docs.microsoft.com/en-us/visualstudio/test/unit-test-basics?view=vs-2017

0 голосов
/ 05 февраля 2019

Пример юнит-теста для вас.Код использует NSubstitute для фиктивного объекта.

public class Song
{
    public string Name { get; }

    public string Artist { get; }

    public int Records { get; }

    public Song(string name, string artist, int records)
    {
        Name = name;
        Artist = artist;
        Records = records;
    }
}

public interface IInOutService
{
    void Ask(string question);

    string GetString();

    string AskValue(string question);
}

public class InOutService : IInOutService
{
    public void Ask(string question)
    {
        Console.WriteLine(question);
    }

    public string GetString()
    {
        return Console.ReadLine();
    }

    public string AskValue(string question)
    {
        Ask(question);
        return GetString();
    }
}

public class FactorySong
{
    private readonly IInOutService _inOutService;

    public FactorySong(IInOutService inOutService)
    {
        _inOutService = inOutService;
    }

    public Song Create()
    {
        var name = _inOutService.AskValue("What is the name of your song");
        var artist = _inOutService.AskValue("What is the artists name");

        int records;
        _inOutService.Ask("How many records did it sell");

        while (!int.TryParse(_inOutService.GetString(), out records) || records < 0)
        {
            _inOutService.Ask("That is not valid please enter a number");
        }

        return new Song(name, artist, records);
    }
}

[TestClass]
public class FactorySongTest
{
    [TestMethod]
    public void TestCreate()
    {
        var consoleService = Substitute.For<IInOutService>();
        var testString = "test";
        var testRecords = 1;

        consoleService.AskValue(Arg.Any<string>()).Returns(testString);
        consoleService.GetString().Returns(testRecords.ToString());

        var factory = new FactorySong(consoleService);
        var song = factory.Create();

        Assert.IsNotNull(song);
        Assert.IsTrue(testString == song.Name);
        Assert.IsTrue(testString == song.Name);
        Assert.AreEqual(testRecords, song.Records);
    }
}
0 голосов
/ 05 февраля 2019

Лучшим подходом, вероятно, будет абстрагирование Console с использованием некоторого интерфейса.Но вы также можете предварительно заполнить буфер In Console требуемыми данными.

Например:

var data = String.Join(Environment.NewLine, new[]
{
    "Let it be",
    "Beatles",
    // ...
});

Console.SetIn(new System.IO.StringReader(data));

// usage:
var songName = Console.ReadLine();
var artistName = Console.ReadLine();

См. MSDN

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...