using System;
using System.Collections;
using System.Collections.Generic;
using ConsoleApplication1;
using Moq;
using NUnit.Framework;

namespace Tests1
{
    [TestFixture]
    public class NUnitTestFixture
    {
        [Test]
        public void TestWithDIAndMock()
        {
            //Создание "подделки"
            string testStrForMock = "!тестовая строка!";
            var mock = new Mock<IStr>();
            mock.Setup(x => x.getStr()).Returns(testStrForMock);

            //arrange
            string str1 = "стол";
            string str2 = "столы";
            int expectedDist = 1;
            string expected = "Расстояние между '" + str1 + "' и '" + str2 + "' составляет " + expectedDist.ToString() + testStrForMock;

            //act
            var container = new SimpleInjector.Container();
            
            //Новый объект автоматически создается при регистрации
            container.Register<IDistance, EditDistance>();
            
            //Регистрация требуемого объекта
            PrintConsoleTest printConsoleTest = new PrintConsoleTest();
            container.RegisterSingle<IPrint>(printConsoleTest);

            Main3 t1 = new Main3(container.GetInstance<IPrint>(), container.GetInstance<IDistance>(), mock.Object);
            t1.RunMain3(str1, str2);

            string actual = printConsoleTest.getData();

            //assert
            Assert.AreEqual(expected, actual);
        }
    }
}

