Я реализую классы доступа к хранилищу данных для моего приложения WP7.1.
Общая структура наследования классов следующая:
IDataStore
- интерфейс, который объявляет логические операциичто классы doaim приложения используют.
abstract class XmlDataStore
реализует запрошенную функциональность интерфейса через подпрограммы XElement, но оставляет базовую конфигурацию хранилища данных для классов-преемников.
Абстрактные методы в XmlDataStore
являются:
public abstract void CreateDataStore();
public abstract void OpenDataStore();
public abstract void SaveChanges();
Кроме того, абстрактный класс содержит определения строк const, которые используются преемниками:
protected const string xmlRoot = "Data";
protected const string booksRoot = "Records";
protected const string settingsRoot = "Settings";
Есть два преемника XmlDataStore
: IsolatedStorageDataStore
иInMemoryDataStore
.
Последнее было создано для целей тестирования, поэтому я могу проверить правильность процедур XML-манипуляции, реализованных в abstract XmlDataStore
.
Я добавил библиотеку классов Windows Phoneк моему решению.Ссылается на NUnit через NuGet и реализовал один [TestFixture]:
[TestFixture]
public class XmlDataStoreTest
{
private IDataStore _store;
public XmlBookProgressStoreTest()
{
_store = new InMemoryXmlDataStore();
}
[Test]
public void TestRegisterBookView()
{
_store.RegisterBookView(BookId, "TestBook");
}
}
An InMemoryDataStore
в настоящее время является следующим классом:
public class InMemoryDataStore : XmlDataStore
{
private XDocument _inMemDoc;
public InMemoryDataStore()
{
CreateDataStore();
OpenDataStore();
}
public override void CreateDataStore()
{
try
{
var root = new XElement(xmlRoot);
root.Add(new XElement(booksRoot));
root.Add(new XElement(settingsRoot));
_inMemDoc = new XDocument(root);
}
catch (Exception ex)
{
throw ex;
}
}
public override void OpenDataStore()
{
_deusBookDataFile = _inMemDoc;
}
public override void SaveChanges()
{}
}
}
Теперь, когда я отлаживаю этот класс в простомотладка приложения, InMemoryDataStore
прекрасно работает, но когда я отлаживаю свой модульный тест, я получаю DivideByZeroException
в этой строке кода: var root = new XElement(xmlRoot);
Очевидно, что проблема возникает только при выполнении модульного теста, поэтомудолжно быть как-то связано с этим.Почему существует исключение и как его исправить?