• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

C# - IConsole nie można wykryć typu oraz testowanie metod z ReadKey za pomocą mocków

Object Storage Arubacloud
0 głosów
223 wizyt
pytanie zadane 19 kwietnia 2020 w C# przez dawid2002 Mądrala (5,190 p.)
edycja 19 kwietnia 2020 przez dawid2002
Witam! Chciałem przetestować metodę, która wewnątrz używa Console.ReadKey. Nie jestem pewien, ale najlepiej jest to zrobić za pomocą mocków. W internecie znalazłem takie rozwiązanie:

https://stackoverflow.com/questions/55762713/how-to-mock-a-keypress-in-test-method

Napisałem podobny kod do tego jaki jest na tamtej stronie i kiedy chciałem stworzyć atrapę konsoli (Mock<IConsole>) to pojawił się błąd, że nie można znaleźć nazwy "IConsole".

Jak naprawić ten błąd? Albo jak zrobić, żeby dało się przetestować metodę, która oczekuje na naciśniecie klawisza?

Z góry dziękuje za pomoc!!!

1 odpowiedź

0 głosów
odpowiedź 19 kwietnia 2020 przez Siemił Mądrala (7,380 p.)
wybrane 19 kwietnia 2020 przez dawid2002
 
Najlepsza
Stworz interfejs IConsole ktory bedzie mial metode ReadKey. Potem stworz klase ktora implementuje metode IConsole a metode Console.ReadKey uzyj w metodzie ReadKey. Potem wstrzyknik do swojej klasy/metody obiekt typu IConsole. Przy okazji poczytaj o wstrzykiwaniu zaleznosci. Jak czegos nie rozumiesz to pisz.
komentarz 19 kwietnia 2020 przez dawid2002 Mądrala (5,190 p.)

Kod, który teraz napisałem działa, ale nie wiem czy jest "czysty" (nie licząc nazw, które pisałem na szybko).

Kod do testowania:

using System;

namespace MyProject
{
    public interface IConsole
    {
        ConsoleKeyInfo ReadKey();
    }

    public class FakeConsole : IConsole
    {
        public ConsoleKeyInfo ReadKey()
        {
            return Console.ReadKey();
        }
    }

    public class ClassToTest
    {
        private IConsole MyConsole;

        public ClassToTest(IConsole console)
        {
            MyConsole = console;
        }

        public bool DidUserPressZeroKey()
        {
            return MyConsole.ReadKey().Key == ConsoleKey.D0;
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            
        }
    }
}

Test:

using NUnit.Framework;
using Moq;
using System;

namespace Tests
{
    [TestFixture]
    public class Tests
    {
        [Test]
        public void Test1()
        {
            var Mock1 = new Mock<MyProject.IConsole>();
            var ConsoleInfo = new ConsoleKeyInfo('0', ConsoleKey.D0, false, false, false);
            Mock1.Setup(m => m.ReadKey()).Returns(ConsoleInfo);
            var Class = new MyProject.ClassToTest(Mock1.Object);

            bool Result = Class.DidUserPressZeroKey();

            Assert.IsTrue(Result);
        }
    }
}

 

komentarz 19 kwietnia 2020 przez Siemił Mądrala (7,380 p.)
O to wlasnie mi chodzilo. Moim zdaniem jest poprawnie.

Podobne pytania

+1 głos
1 odpowiedź 186 wizyt
0 głosów
0 odpowiedzi 420 wizyt
pytanie zadane 19 kwietnia 2020 w C# przez dawid2002 Mądrala (5,190 p.)
0 głosów
0 odpowiedzi 149 wizyt
pytanie zadane 20 marca 2020 w C# przez dawid2002 Mądrala (5,190 p.)

92,555 zapytań

141,403 odpowiedzi

319,555 komentarzy

61,940 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...