Wie kann ich behaupten, dass ein Gerät getestet, die Methode True zurück?

Dies ist meine Domäne-Klasse

public partial class Department
{
    public int DepartmentId { get; set; }
    [Required]
    public string DepartmentCode { get; set; }
    [Required]
    public string DepartmentFullName { get; set; }
    public bool Status { get; set; }
    public System.DateTime CreatedOn { get; set; }
}

In meiner MVC Anwendung, dies ist, wie mein DepartmentService Klasse aussieht.

public class DepartmentService : IDepartmentService
{
    private IUnitOfWork _UoW;
    private IRepository<Department> repository;
    public DepartmentService(IUnitOfWork UoW)
    {
        _UoW = UoW;
        repository = _UoW.GetRepository<Department>();
    }

    public IList<Department> GetAllDepartments()
    {
        return repository.GetAll();
    }

    public bool SaveDepartment(Department newDepartment)
    {
        try
        {
            repository.Add(newDepartment);
            _UoW.Save();
        }
        catch (Exception)
        {
            throw;
        }
        return true;
    }
}

Schrieb ich einen unit-test für GetAllDepartments Methoden, wie unten beschrieben.

[Test]
public void When_GetAllDepartments_Is_Called_RepositoryGetAll_ShouldBeCalled()
{
    //Arrange
    var mockUnitOfWork = new Mock<IUnitOfWork>();
    var mockRepository = new Mock<IRepository<Department>>();
    mockUnitOfWork.Setup(x => x.GetRepository<Department>())
                  .Returns(mockRepository.Object);
    var sut = new DepartmentService(mockUnitOfWork.Object);

    //Act
    sut.GetAllDepartments();

    //Assert
    mockRepository.Verify(x => x.GetAll());
}

Ich testen wollen SaveDepartment Methode, wo, Wann-Abteilung ist erfolgreich gespeichert, es sollte true zurückgeben. Ich bin nicht in der Lage zu schreiben unit-Tests für diese.

Möchte ich auch testen, wenn DepartmentCode oder DepartmentFullName leer ist, und falls das Speichern versucht, wird eine Ausnahme geworfen werden sollte.

Dies ist, was ich habe, so weit.

[Test]
public void ShouldSucessfully_SaveNewDepartment()
{
    //Arrange
    var mockUnitOfWork = new Mock<IUnitOfWork>();
    var mockRepository = new Mock<IRepository<Department>>();
    Department newDept = new Department { 
          CreatedOn = DateTime.Now,
          Status = true, 
          DepartmentFullName = "DFN", 
          DepartmentCode = "DC" };
    mockUnitOfWork.Setup(x => x.GetRepository<Department>())
                  .Returns(mockRepository.Object);
    var sut = new DepartmentService(mockUnitOfWork.Object);

    //Act
    sut.SaveDepartment(newDept);

    //Assert 
    //???
}
  • bool result = sut.SaveDepartment(newDept); Assert.IsTrue(result);?
  • Nicht sut.SaveDepartment(newDept); tatsächlich fügen Sie einen Datensatz in der DB ? Ich denke, dass ich nicht wollen, dass dies passiert. Oder sollte es passieren, in unit-Tests ?
  • Sie wies die mock unitofwork, Euch wieder ein mock-repository. Solche repository nicht handeln auf die Datenbank
  • Aktualisiert haben die OP. Wie kann ich testen, für einen Misserfolg ? Denn wenn DepartmentCode oder FullName fehlt, dann sollte die Ausnahme geworfen werden.
  • Sorry, konnte Sie markieren als Antwort, wenn Sie zufrieden sind, indem Sie keine Antwort?
Schreibe einen Kommentar