В настоящее время я изучаю 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);
}
Дайте мне знать, если вам нужна какая-либо другая информация.