在VS2012中编写单元测试用例

时间:2014-03-17 11:02:38

标签: c# unit-testing

我是使用VS2012编写单元测试用例的新手。

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

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

4 个答案:

答案 0 :(得分:1)

只是概述了您可以在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);
}

答案 1 :(得分:0)

这是一个非常广泛的问题,但可以说你有一个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
 }

这是非常基本的,但会给你一个想法。显然,您将拥有一个Fake Employee Repository,它只返回一个预先设置好的Employee,在生产中,您将拥有IEmployeeRepository的实际实现,例如,它将连接到DB

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

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

这是所有手动输入的,所以这里可能有错误......它只是提出一个想法。

答案 2 :(得分:0)

  1. 右键单击要为单元测试编写的方法&gt;创建UnitTest ...
  2. 在“创建单元测试”对话框中
  3. 勾选要为其生成单元测试的方法:
  4. [OK]
  5. 输入测试项目的名称
  6. [创建]
  7. 使用Assert类检查结果

答案 3 :(得分:0)

以下是步骤 1.添加单元测试项目,解决方案资源管理器 - &gt;添加 - &gt;新项目 - &gt;从模板中选择测试 - &gt;单元测试项目。 2.下载并添加对Moq库的引用​​,您可以通过下面的Nuget命令执行该操作。要获取Nuget Package Manager控制台,请转到“工具”菜单 - &gt;库包管理器控制台 - &gt;库包管理器。这应该显示Nuget包管理器控制台靠近debug,错误窗口。

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(); }

    public class UnitOfWork:IUnitOfWork {     // IUnitOfWork的实现

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

    }

    公共类EmployeeRepository:IEmployeeRepository {     //你在这里注射工作单位     public IUnitOfWork UnitOfWork {get;组; }

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

    }

  2. 右键单击Unit Test项目,Add - &gt;将UnitTest添加到UnitTest项目中。单元测试。 以下是基于上述类的单元测试的示例代码。

    使用System; 使用Microsoft.VisualStudio.TestTools.UnitTesting; 使用Moq;

  3. 命名空间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);
        }
    
    }
    

    }