簡體   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