2012-09-09 67 views
3

試圖單元測試某個類項目的一些簡單代碼,但是每次嘗試運行測試時,都會收到一個錯誤消息,指出沒有home.exe並且沒有主靜態main方法。但是,我們還沒有達到我們應該具備這兩種功能之一的地步,所以我如何在沒有他們的情況下進行測試?在沒有主要方法的Visual Studio 2010中進行單元測試

我的代碼

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace Home 
{ 
    class InventoryType 
    { 

     /// <summary> 
     /// Selects the inventory type and returns the selected value 
     /// </summary> 
     public class InventorySelect 
     { 
      private string inventoryTypes; 
      public String InventoryTypes 
      { 
       set 
       { 
        inventoryTypes = value; 
       } 

       get 
       { 
        return inventoryTypes; 
       } 
      } 


      /// <summary> 
      /// Validate that the inventory is returning some sort of value 
      /// </summary> 
      /// <returns></returns> 
      public bool Validate() 
      { 
       if (InventoryTypes == null) return false; 
       return true; 
      } 
     } 
    } 
} 

我的測試代碼

using System; 
using System.Text; 
using System.Collections.Generic; 
using System.Linq; 
using Microsoft.VisualStudio.TestTools.UnitTesting; 
using Home.InventoryType.InventorySelect; 

namespace HomeTest 
{ 
    [TestClass] 
    public class TestInventoryTypeCase 
    { 
     [TestMethod] 
     public void TestInventoryTypeClass() 
     { 
      InventorySelect select = new InventorySelect(); 
      select.inventoryTypes = "Collection"; 

      if (Validate() = true) 
       Console.WriteLine("Test Passed"); 
      else 
       if (Validate() = false) 
        Console.WriteLine("Test Returned False"); 
       else 
        Console.WriteLine("Test Failed To Run"); 

      Console.ReadLine(); 

     } 
    } 
} 

回答

0

要在您的Visual Studio上運行的主菜單欄上的測試... 測試 - 窗口 - 測試資源管理器

在測試瀏覽器窗口中,選擇您想要運行的測試,然後單擊窗口頂部的運行圖標。

+0

我想你的意思是測試視圖?由於沒有測試資源管理器,所有在測試視圖中出現的都是一個黃色條,表示要刷新,但刷新時沒有任何反應,只是在錯誤列表框中顯示它嘗試構建並且不能,因爲那裏沒有home.exe,沒有主要的靜態主要方法...這使我回到我原來的問題 – Expecto

+0

正在尋找VS 2012 - 它被稱爲測試資源管理器那裏 - 但是,如果您使用VS 2010,它是測試視圖 – Kevin

+1

您的主項目是什麼類型的項目?如果它不是類庫 - 你必須定義一個起始對象/方法(對於作爲靜態主方法的控制檯程序)。我懷疑你有一個沒有定義啓動對象/方法的控制檯應用程序解決方案。 – Kevin

3

好吧,這裏有幾件事。

  1. 確保爲您的主項目的輸出類型(項目進行測試)是ClassLibrary
  2. 使用斷言在測試中

我創建了一個名爲ExampleLibrary一個ClassLibrary解決方案。創建一個名爲InventoryType的類並將其複製到您的代碼中,例如

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace ExampleLibrary 
{ 
    class InventoryType 
    { 

     /// <summary> 
     /// Selects the inventory type and returns the selected value 
     /// </summary> 
     public class InventorySelect 
     { 
      private string inventoryTypes; 
      public String InventoryTypes 
      { 
       set 
       { 
        inventoryTypes = value; 
       } 

       get 
       { 
        return inventoryTypes; 
       } 
      } 


      /// <summary> 
      /// Validate that the inventory is returning some sort of value 
      /// </summary> 
      /// <returns></returns> 
      public bool Validate() 
      { 
       if (InventoryTypes == null) return false; 
       return true; 
      } 
     } 
    } 
} 

我然後創建了一個單元測試和編碼,如下所示:

using Microsoft.VisualStudio.TestTools.UnitTesting; 
using ExampleLibrary; 

namespace HomeTest 
{ 
    [TestClass] 
    public class TestInventoryTypeCase 
    { 
     [TestMethod] 
     public void TestInventoryTypeClass() 
     { 
      InventoryType.InventorySelect select = new InventoryType.InventorySelect(); 
      select.InventoryTypes = "Collection"; 

      Assert.IsTrue(select.Validate()); 
      select.InventoryTypes = null; 
      Assert.IsFalse(select.Validate()); 
     } 
    } 
} 

予編譯和如上所述運行測試,它運行和返回測試通過。

+0

編輯 - 添加第二個聲明來測試Validate()的另一個狀態。 – Kevin

+0

我的測試示例有問題。它應該是*兩個*測試 - 一個測試當'InventoryTypes'屬性不爲null,'Validate'方法返回true時,並且驗證相反的行爲。不好的單元測試可能比單元測試更糟糕。 –

+0

不確定我同意你的意見。我在單元測試中的哲學一直是測試一個行爲單位。這裏定義的行爲是當InvertoryTypes屬性爲null時Validate返回false否則它返回true(單個行爲單位)。在我看來,這隻需要一個測試。 – Kevin

相關問題