繁体   English   中英

在VS2012中编写单元测试用例

[英]Write unit test cases in VS2012

我是第一次使用VS2012编写单元测试用例。

有人可以帮我编写以下方法的单元测试用例吗?

public myclasstype getEmployeeById(int empid)
{
    // this method will return employee objects
}

只是可以对GetEmployeeById方法进行测试的概述:

[TestMethod]
public void GetEmployeeById_Id_Employee()
{
   Employee employee = mockManager.MockObject<Employee>().Object;
   employee.DateOfBirth = new DateTime(1970, 1, 1, 0, 0, 0);

   using (RecordExpectations recorder = new RecordExpectations())
   {
     var dataLayer = new DataLayer();
     recorder.ExpectAndReturn(dataLayer.GetEmployeeById(1), employee);
   }

   var company = new Company();
   Employee result = company.GetEmployeeById(1);
   Assert.AreEqual(result.DateOfBirth, employee.DateOfBirth);
}

这是一个相当广泛的问题,但是可以说您有一个Employee类...

public class Employee
{
   private IEmployeeRepository _repo;
   public Employee(IEmployeeRepository repo)
   {
    _repo = repo;
   }

   public Employee GetEmployeeById(int empid)
   {
      return _repo.GetEmployeeById(empid);
   }
}

然后,您的测试需要是类似...

[Test]
public void Employee_GetEmployee_By_Id()
{
   IEmployeeRepository repo = new FakeEmployeeRepository();
   var employeeClass = new Employee(repo);
   var employee = employee.GetEmployeeById(1);

   //verify employee detail
 }

这是非常基本的,但是可以给您一个想法。 显然,您将拥有一个伪造的员工存储库,该存储库将仅返回一个预设置的员工,而在生产环境中,您将拥有一个实际的IEmployeeRepository实现,该实现将连接到DB

public interface IEmployeeRepository 
{
   Employee GetEmployeeById(int id);
}

public class FakeEmployeeRepository : IEmployeeRepository 
{
   public Employee GetEmployeeById(int id)
   {
     return new Employee { ... };
   }
}

这些都是手工输入的,因此这里可能有错误...不过只是为了提供一个想法。

  1. 右键单击要编写单元测试的方法>创建单元测试...
  2. 在“创建单元测试”对话框中
  3. 勾选要为哪些单元测试生成方法:
  4. [好]
  5. 输入测试项目的名称
  6. [创造]

使用Assert类检查结果

下面是步骤1.添加单元测试项目,Solution Explorer->添加->新项目->从模板->单元测试项目中选择测试。 2.下载并添加对Moq库的引用​​,您可以通过下面的Nuget命令执行此操作。 要获取Nuget包管理器控制台,请转到工具菜单->库包管理器控制台->库包管理器。 这应该在调试,错误窗口附近显示Nuget软件包管理器控制台。

install-package Moq

按下上述命令时,请确保已在Nuget软件包管理器控制台的项目列表中选择了测试项目。

  1. 可以说您定义了以下类

     public class Employee 

    {public int Id {get; 组; }

     public string Name { get; set; } 

    }

    公共接口IEmployeeRepository {Employee GetById(int id); }

    公共接口IUnitOfWork {T GetById(int id)其中T:new(); }

    公共类UnitOfWork:IUnitOfWork {// IUnitOfWork的实现

     //public T GetById<T>(int id) where T: new(); //{ // return new T(); //} 

    }

    public class EmployeeRepository:IEmployeeRepository {//您要在此处注入工作单元public IUnitOfWork UnitOfWork {get; 组; }

     public Employee GetById(int id) { // Making call to database here; return UnitOfWork.GetById<Employee>(id); } 

    }

  2. 右键单击“单元测试”项目,然后单击“添加”->“单元测试”,将“单元测试”添加到您的“单元测试”项目中。 下面是基于上述类的单元测试的示例代码。

    使用系统; 使用Microsoft.VisualStudio.TestTools.UnitTesting; 使用最小起订量;

名称空间UnitTestProject1 {[TestClass]公共类EmployeeUnitTest {模拟_unitOfWork; IEmployeeRepository _employeeRepository;

    //This will be called before each test
    [TestInitialize]
    public void SetUp()
    {
        _unitOfWork = new Mock<IUnitOfWork>();
        _employeeRepository = new EmployeeRepository();
    }

    [TestMethod]
    public void GetById_ShouldCallUnitOfWork()
    {
        //Arrange
        const int Id = 1;
        _unitOfWork.Setup(x => x.GetById<Employee>(It.IsAny<int>())).Verifiable();

        //Act
        _employeeRepository.GetById(Id);

        //Assert
        _unitOfWork.Verify(x => x.GetById<Employee>(Id), Times.Once());
    }

    [TestMethod]
    public void GetById_ShouldRetrunEmployee()
    {
        //Arrange
        const int Id = 1;
        var expectedEmp = new Employee { Id = Id, Name= "Emp"};

        _unitOfWork.Setup(x => x.GetById<Employee>(It.IsAny<int>())).Returns(expectedEmp) ;

        //Act
        var employee = _employeeRepository.GetById(Id);

        //Assert
        Assert.AreEqual(expectedEmp, employee);
    }

}

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM