2016-08-29 181 views
6

我正在構建一個ASP.NET核心Web應用程序(.Net Framework),並且很難弄清楚如何掛鉤單元測試。我的目標是.net框架版本4.6.1你如何測試ASP.NET核心Web應用程序(.Net Framework)?

如果我創建一個定向4.6.1的常規「類庫」項目,就像我以前版本的MVC一樣,它允許我添加對我的MVC項目的引用是同一解決方案的一部分),但通過using語句添加的任何名稱空間都會報告可能缺少引用或使用語句的錯誤。如果我雙擊解決方案資源管理器中「引用」部分下的引用,它會告訴我該項目無法找到或尚未構建。

我試着創建一個「類庫(.NET核心)」,但抱怨因爲我的目標.net框架,而不是.net核心。我編輯了類庫lib Project.json,讓它定位到.net框架,並且允許我添加我的引用並且不會在我聲明using語句中的命名空間時發出抱怨,但是我的測試沒有被測試運行器發現。我已經嘗試了XUnit和NUnit,它們的表現都一樣。

是否有可能單元測試針對.Net Framework 4.6.1的ASP.Net Core Web應用程序,還是需要提交到.NET Core?

編輯添加我的測試類 這裏是我的測試課被剝離到最低限度。 TestBank.Services是我想要測試的類。

using System; 
using TestBank.Services; 
using Xunit; 

namespace TestBankUnitTests 
    {  
    public class Class1 
    {   
     [Fact] 
     public void TestA() 
     { 
      Assert.True(false); 
     } 
    } 
} 

,這裏是我的project.json

{ 
    "version": "1.0.0-*", 

    "dependencies": { 
     "xunit": "2.1.0", 
     "dotnet-test-xunit": "1.0.0-rc2-build10025", 
     "TestBank": "1.0.0-*" 
    }, 

    "frameworks": { 
     "net461": { 
     } 
    } 
} 
+0

單元測試發現是相當挑剔的。我發現我必須有一個只包含.net核心項目的項目的解決方案,否則它不會找到測試。例如,我有一個.core核心mvc應用程序和一個.core庫以及我的測試,第三個項目只是一個類庫(而不是.net核心)。由於某種原因,VS在我從解決方案中刪除非核心庫之前無法發現測試。 –

+0

現在,我的解決方案只有MVC項目和.net核心類庫(已修改爲以.Net Framework 4.6.1爲目標),並且沒有發現測試。這讓我懷疑測試發現是否僅適用於真正的.net核心,而不適用於.net核心,適用於.net框架。 –

+0

不應該是一個問題。這就是我在解決方案中所做的。你可以發佈你的測試課嗎?他們是公共方法,公共方法標有'事實'或同等權利? –

回答

8

project.json需要testRunner設置。根據project.json documentationtestRunner設置不僅指定要使用哪個測試框架,還將該項目標記爲測試項目。

嘗試增加它,看看它是否發現你的測試(本地驗證,它不會找到測試在文件中沒有此設置)

{ 
    "version": "1.0.0-*", 

    "dependencies": { 
     "xunit": "2.1.0", 
     "dotnet-test-xunit": "1.0.0-rc2-build10025", 
     "TestBank": "1.0.0-*" 
    }, 

    "frameworks": { 
     "net461": { 
     } 
    }, 

    "testRunner": "xunit" 
} 
+0

這樣做的伎倆。現在我感到很傻,因爲最初錯過了!謝謝! –

0

我有一個類似的問題,並找到了解決辦法。我在這裏發佈它以防萬一它幫助某人。我所學到的是,使用一個針對net461的xproj庫來測試一個針對net461的Asp.Net核心項目(.Net Framework)項目和一個針對框架4.61的Windows類庫,但是這個設置似乎非常挑剔和脆弱。對於我的關鍵洞察來自此線程https://github.com/aspnet/Tooling/issues/245其中@BradRem表明項目的文件夾結構似乎是問題的根源。

最初,我曾嘗試使用此文件夾結構:

SRC
____Asp.Net核心項目(.NET Framework)的項目目標Net461
____Windows類庫目標框架4。61

測試
____Core庫用於運行的xUnit測試

但是,當我嘗試使用該文件夾結構來運行測試它產生的開始了這樣的例外:

Unable to start C:\Program Files\dotnet\dotnet.exe 
dotnet-test Error: 0 : [ReportingChannel]: Waiting for message failed System.IO.IOException: Unable to read data from the transport connection: An established connection was aborted by the software in your host machine. ---> System.Net.Sockets.SocketException: An established connection was aborted by the software in your host machine 
    at System.Net.Sockets.Socket.Receive(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags) 
    at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size) 
    --- End of inner exception stack trace --- 
    at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size) 
    at System.IO.Stream.ReadByte() 
    at System.IO.BinaryReader.ReadByte() 
    at System.IO.BinaryReader.Read7BitEncodedInt() 
    at System.IO.BinaryReader.ReadString() 
    at Microsoft.DotNet.Tools.Test.ReportingChannel.ReadMessages() 

但當我更改爲以下文件夾結構時,我能夠使其正常工作:

src
____Asp.Net C礦項目(.NET Framework)的項目目標Net461
____Windows類庫目標框架4.61
____Core庫用於運行的xUnit測試

所以關鍵是把,裏面的測試類庫src文件夾所在的文件夾其他項目文件夾。

也就是說,另一件看起來有很大區別的事情是同時將其他兩個項目的引用添加到Core Library測試項目中,而不是一次添加一個。

0

我發現了一些適合我的東西。
在我的測試項目中,我project.json文件看起來像這樣:

{ 
    "version": "1.0.0-*", 
    "testRunner": "xunit", 

    "dependencies": { 
    "xunit": "2.2.0-beta2-build3300", 
    "dotnet-test-xunit": "2.2.0-preview2-build1029", 
    "Ng2a.WebApi": "1.0.0-*" 
    }, 

    "frameworks": { 
    "net452": { 
    } 

    } 
} 

'Ng2a.WebApi' 是我的web API的核心工程。它只針對net452。 的Ng2a.WebApi project.json文件看起來是這樣的:

"frameworks": { 
"net452": {} 

},

相關問題