目前,我正在学习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);
}
让我知道您是否需要其他信息。