Я только начал с модульного тестирования и хотел бы знать, нахожусь ли я на правильном пути.Не могли бы вы, ребята, посмотрите на мой код и скажите, что вы думаете, если он есть?
Это (основной) метод, который я хочу проверить:
public void Accept(long resumeId)
{
// Get the resume that has to be accepted
Resume originalResume = ResumeDAC.GetById(id);
// Make a copy of the resume
Resume resumeCopy = CopyResume(originalResume );
// Accept the original resume and lock it
originalResume .AcceptAndLock();
// Accept the copy and keep it open for editing
resumeCopy.AcceptAndKeepOpen();
// Add the copy to the database
ResumeDAC.Add(resumeCopy);
// Commit everything
ResumeDAC.Commit();
}
Что я хочупроверить это:
- Исходное резюме имеет статус «AcceptedAndLocked»
- Скопированное резюме имеет статус «AcceptedAndOpen»
- Скопированное резюме было добавлено вбаза данных
Я не хочу использовать реальную базу данных в этом тесте, но у меня есть два класса, которые используют базу данных: EmployeeDAC и ResumeDAC.EmployeeDac очень прост, поэтому я высмеял его с помощью Rhino Mocks.Я думаю, что ResumeDAC немного сложнее, потому что «копия резюме» создается и добавляется в базу данных.Я хочу заявить, что копия резюме добавлена в базу данных.
Давайте посмотрим на мой тестовый код:
[TestMethod]
public void TestAcceptResume()
{
// Arrange
// These two classes are used for database actions
EmployeeDAC mockEmployeeDAC = ArrangeEmployeeDAC(); // Simply mocked with Rhino Mocks
TestResumeDAC mockResumeDac = new TestResumeDAC(); //I've created my own test double. See below
// Inject the two Data Access Classes into the ResumeService
var resumeService = new ResumeService("", mockResumeDac, mockEmployeeDAC);
// Act
var resume = resumeService.Accept(3);
// Assert
Resume origResume = mockResumeDac.Resumes.Single(it => it.Id == resumeId);
Assert.AreEqual("AcceptedAndLocked", origResume.StatusName);
Assert.AreEqual(4, mockResumeDac.Resumes.Count); // Expect 4 records in the database
}
Это мой собственный тестовый вариант ResumeDAC (Класс доступа к данным)используется в тесте
internal class TestResumeDAC : ResumeDAC
{
public TestResumeDAC() : base()
{
Resumes = new List<Resume>();
// Add resumes to the list
AddResumes();
}
public List<Resume> Resumes { get; set; }
public override void Add(Resume resume)
{
Resumes.Add(resume);
}
public override void Commit()
{
}
public override Resume GetById(long id)
{
return Resumes.SingleOrDefault(it => it.Id == id);
}
}
Как вы можете видеть, я сделал вид базы данных в памяти.Это позволяет мне легко видеть, добавляются или удаляются объекты и т. Д.
Итак, мой вопрос: как вам этот код?Пожалуйста, дайте мне знать, если это не тот путь или какие-либо ошибки, которые я сделал в своих мыслях, советах и т. Д.