2016-08-29 229 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": {} 

},

相关问题