如何使用Unity Framework for IOC编写单元测试

时间:2018-09-03 05:35:43

标签: c# unit-testing moq unity-container

目前,我正在学习DI和IOC。我已经使用统一框架开发了小型应用程序。现在,我想同样地设计/开发单元测试。有人可以帮我吗?

我想知道如何为此编写代码。我已经尝试了几件事,但是没有运气。它给了我一个对象引用错误。

请在下面找到我的代码

项目代码

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);
    }

让我知道您是否需要其他信息。

0 个答案:

没有答案