簡體   English   中英

如何對創建任務的方法進行單元測試

[英]How to unit testing a method which creates a task

以下方法應如何進行單元測試?

    /// <summary>
    /// Entry point for GUI thread.
    /// </summary>
    public void VerifyDataTypesAsync()
    {
        Task verificationTask = Task.Factory.StartNew(() =>
        {
            VerifyDataManagerAsync();
        });
    }

是否只能通過集成測試進行測試,還是可以測試已創建任務?

謝謝你的幫助

您可以創建一個工廠來創建此任務,並通過接縫使用它。 您可以使用屬性接縫-在將工廠的實例設置為被測類的屬性時,或者可以通過向構造函數提供工廠來使用構造函數接縫。 然后,您可以模擬該工廠,並通過兩個接縫之一對其進行設置,並檢查VerifyDataTypesAsync方法是否調用創建任務的方法。

class YourClass
{
    public YourClass(ITaskFactory factory)
    {}

    public void VerifyDataTypesAsync()
    {
       Task verificationTask = factory.Create(); // you can pass an instance of a delegate as parameter if you need.  
    }
}

class TasksFactory : IFactory
{
   public Task Create()
   {

   }
}

然后,在測試中,您可以創建IFactory的模擬對象並將其傳遞給類的構造函數,然后為模擬設置模擬規則,以檢查是否調用了Create方法。

如果我們談論的是NUnit和RhinoMocks,可以這樣看:

var mockRepository = new MockRepository();
var mockObject = mockRepository.CreateMock<IFactory>();
var yourClass = new YourClass(mockObject);    


Expect.Call(mockObject.Create);

mockRepository.ReplayAll();

mockObject.VerifyDataTypesAsync()

mockRepository.VerifyAll(); // throw Exception if your VerifyDataTypesAsync method doesn't call Create method of IFactory mock

這樣粗略地講...但這只是一種方式...

您可以將任務的創建包裝在自己的Task工廠類中,並通過在單元測試中對它進行模擬來驗證它是否已正確使用。 例如,創建一個這樣的類:

class MyTaskFactory
{
  public virtual void CreateTask(Action a)
  {
    Task.Factory.StartNew(a);
  }
}

您使用這些工廠對象之一提供需要創建任務的對象。 在單元測試中,您提供模擬版本而不是實際工廠,並查看是否已調用CreateTask方法。

有關模擬的更多信息,請查看RhinoMocksMoq

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM