То, что я хотел бы сделать, это использовать Test Driven Development и создание диаграмм классов как часть моего процесса разработки этого проекта.
Это 2 разных подхода к дизайну - вам нужно выбрать один. TDD управляет дизайном, основанным на поведении и тестах. UML, как правило, используется в BDUF (Big Design Up Front) - хотя его можно использовать просто для неформального общения между разработчиками, не будучи частью «дизайна». Суть, однако, в том, что вам нужно решить, как вы хотите разрабатывать свое программное обеспечение. Для меня, как правило, мне удобнее использовать подход TDD, но для хорошо известного домена я могу вместо этого провести сеанс BDUF (хотя я не использую UML).
Моя проблема; Я не уверен, с чего начать. Я читал о модульном тестировании и UML, но никогда не использовал их на практике.
Предполагая, что вы говорите [T | B] DD, а не «модульное тестирование» - вы начинаете с тестов, которые подтверждают поведение, необходимое для вашего приложения. Если вы пойдете по пути [T | B] DD, я, вероятно, полностью пропущу UML. В противном случае, просто запустите генератор UML, когда закончите, и вы получите красивые картинки. ;)
[TestFixture]
public class WhenAddingNewProject {
[Test]
public void SubPagesAreCreated() {
var p = Project.Create("MyProjectGroup\\MyTestProject");
Assert.IsGreaterThan(p.SubPages.Count, 0);
}
[Test]
public void FirstSubPageIsWikiPage() {
var p = CreateProject();
var subPage = p.SubPages[0];
Assert.AreEqual(subPage.Title == "MyTestProject Wiki");
Assert.IsTypeOf<WikiSubPage>(subPage);
}
[Test(ExpectedException := typeof(SecurityException))]
public void DefaultsToAdministratorPrivileges() {
var p = CreateProject();
var u = User.Login("testuser", "testpassword");
Assert.IsNotNull(u);
Assert.AreEqual(UserRole.User, u.Role);
p.Delete();
Assert.Fail();
}
private Project CreateProject() {
return Project.Create("MyProjectGroup\\MyTestProject");
}
}
Кроме того, как никогда раньше не работать с базами данных, как мне включить эти элементы в модели и тестовые модули?
Вы нет. По определению, если вы попали в базу данных - вы запускаете интеграционный тест, а не модульный тест. Для модульных тестов вы хотите абстрагировать базу данных и игнорировать / смоделировать / заменить ее. Получив свою логику из базы данных, вы можете протестировать ее отдельно - тогда вам нужно только проверить загрузку / сохранение данных (вы используете ORM, верно?).