Как написать модульный тест с использованием Unity Framework для IOC - PullRequest
0 голосов
/ 03 сентября 2018

В настоящее время я изучаю DI и IOC. Я разработал небольшое приложение, используя единство рамки. Теперь я хотел бы спроектировать / разработать Unit Test для того же. Может ли кто-нибудь помочь мне с этим?

Я хотел бы знать, как написать код для этого. Я уже попробовал несколько вещей, но не повезло. Это дает мне ссылку на объект Ошибка.

Пожалуйста, найдите мой код как показано ниже

Код проекта

public interface IDeserialize
{
    List<book> GetDeserialize();
}

public class Deserialize : IDeserialize
{
    private IPathProvider _pathProvider;
    private const string _fileName = "\\XML\\Books.xml";
    private const string _xmlRootAttribute = "Books";

    public Deserialize(IPathProvider pathProvider)
    {
        _pathProvider = pathProvider;
    }

    public List<book> GetDeserialize()
    {    
        string xmlString = System.IO.File.ReadAllText(_pathProvider.FilePath(_fileName));

        XmlSerializer serializer = new XmlSerializer(typeof(List<book>), new XmlRootAttribute(_xmlRootAttribute));
        using (StringReader sr = new StringReader(xmlString))
        {
            return (List<book>)serializer.Deserialize(sr);
        }
    }
}

BookListController

  public BookListController(IDeserialize desrializeServiceProvider, ISerialize serializeServiceProvider)
    {
        _deserializeServiceProvider = desrializeServiceProvider;
        _serializeServiceProvider = serializeServiceProvider;
    }
    #endregion

    #region Book Operations
    // GET: BookList
    public ActionResult Index()
    {
        try
        {
            if (IsValidUser())
            {
                return RedirectToAction("Index", "Admin");
            }
            else
            {
                List<book> books = _deserializeServiceProvider.GetDeserialize();
            }
        }
        }

IOCconfigurator.cs

 public static class IocConfigurator
{
    public static void ConfigureIocContainer()
    {
        IUnityContainer container = new UnityContainer();

        registerServices(container);

        DependencyResolver.SetResolver(new LibraryDependencyResolver(container));
    }

    private static void registerServices(IUnityContainer container)
    {
        container.RegisterType<IDeserialize, Deserialize>();
        container.RegisterType<ISerialize, Serialize>();
        container.RegisterType<IPathProvider, PathProvider>();
    }
}

Код модульного теста - Что не работает

[TestClass]
public class BookListControllerTest
{
    private IPathProvider TestPathProvider()
    {
        Mock<IPathProvider> mockObject = new Mock<IPathProvider>();
        mockObject.Setup(m => m.FilePath("\\XML\\Books.xml"));
        return mockObject.Object;
    }

    // Step 6. Add the definition of the mock objects
    private IDeserialize TestDeserialize()
    {
        IPathProvider pp = this.TestPathProvider();

        Mock<IDeserialize> mockObject = new Mock<IDeserialize>();
        Deserialize dc = new Deserialize(pp);
        mockObject.Setup(m => m.GetDeserialize());
        return mockObject.Object;
    }

    private ISerialize TestSerialize()
    {
        IPathProvider pp = this.TestPathProvider();
        Mock<ISerialize> mockObject = new Mock<ISerialize>();
        Serialize sc = new Serialize(pp);
        List<book> books = null;
        mockObject.Setup(m => m.GetSerialize(books));
        return mockObject.Object;
    }


    [TestMethod]
    public void Index()
    {

        IDeserialize ds = this.TestDeserialize();
        ISerialize sd = this.TestSerialize();

        BookListController controller = new BookListController(ds, sd);

        ViewResult result = controller.Index() as ViewResult;

        Assert.IsNotNull(result.Model);
    }

Дайте мне знать, если вам нужна какая-либо другая информация.

...