2015-01-13 28 views
23

Gần đây tôi đã cài đặt Visual Studio 2015 và bắt đầu một dự án với một trang web và một thư viện lớp asp sẽ chứa các bài kiểm tra đơn vị cho trang web. Tôi thường sử dụng Moq để chế nhạo nhưng tôi không lạ gì khi thử một khung mocking khác. Vấn đề tôi gặp phải là tôi đã thêm Moq làm tham chiếu đến dự án thử nghiệm đơn vị và bắt đầu sử dụng nó. Tất cả mọi thứ có vẻ tốt lúc đầu cho đến khi tôi cố gắng biên dịch.Mocking framework cho asp.net core 5.0

Khi tôi biên soạn tôi nhận được một thông báo lỗi nói:

ASP.NET Core 5.0 error CS0246: The type or namespace name 'Moq' could not be found (are you missing a using directive or an assembly reference?)

tôi nhận thấy rằng tôi có thể chuyển đổi giữa ASP.NET 5.0 và ASP.NET Lõi 5,0 trong giao diện mã và khi lựa chọn ASP.NET Core 5.0 tôi nhận được lỗi nhưng không có khi chọn ASP.NET 5.0. Tôi đã thử tìm kiếm câu trả lời nhưng tôi không có may mắn.

Vấn đề mà Moq không hoạt động với vnext và tôi nên sử dụng một khung công tác khác (nếu có hiệu quả?) Hoặc tôi có thể giải quyết vấn đề này bằng cách nào đó không? project.json của tôi:

{ 
"version": "1.0.0-*", 
"dependencies": { 
    "Web": "1.0.0-*", 
    "Xunit.KRunner": "1.0.0-beta1", 
    "xunit": "2.0.0-beta5-build2785", 
    "Moq": "4.2.1409.1722" 
}, 

"frameworks": { 
    "aspnet50": { 
     "dependencies": { 
     } 
    }, 
    "aspnetcore50": { 
     "dependencies": { 
     } 
    } 
}, 
"commands": { 
    "test": "Xunit.KRunner" 
} 

} 
+0

Tôi có đã viết một blog về điều này. có một cái nhìn ở đây: https://neelbhatt40.wordpress.com/2016/10/15/moq-in-asp-net-core/ – Neel

Trả lời

8

Tôi cho rằng cho đến nay một phiên bản của Moq làm việc với asp.net lõi 5.0 là không có sẵn trong thức ăn NuGet, nhưng tôi nghĩ rằng bạn có thể làm việc với Asp.Net 5.0.

+2

Tôi đã loại bỏ "aspnetcore50": {"dependencies": {}} và nó bắt đầu hoạt động – user1842278

+0

Lukasz Pyrzyk có một câu trả lời được cập nhật dưới đây được Moq làm việc với aspnetcore50. –

4

Bạn sẽ có thể sử dụng hầu hết các thư viện với khung khổ aspnet50, vì nó hoạt động với cùng cấu trúc/CLR "kiểu" có sẵn trong khung .net trước đó. Điều này sẽ bao gồm Moq/Rhino/Nunit, v.v.

Trong aspnetcore50 bạn đang sử dụng CoreCLR mới và cần sử dụng các phụ thuộc cũng được chuyển sang làm việc với các thư viện CoreCLR mới. Xunit đã có điều này như các đội MS đã làm nó để họ có thể kiểm tra đơn vị, do đó nó có sẵn. Tôi không biết rằng có một khuôn khổ nhạo báng được nêu ra, nhưng tôi đang tìm kiếm một.

Vì vậy, nếu bạn hạn chế dự án của mình chỉ sử dụng khung khổ aspnet50 bằng cách xóa aspnetcore50 thì bạn nên sử dụng bất cứ điều gì.

Lưu ý rằng điều này cho bạn hạn chế rằng bạn chỉ có thể kiểm tra đơn vị nơi có CLR chính. Điều này có thể hạn chế đối với bạn nếu bạn dự định ứng dụng của mình chạy trên CoreCLR khi được triển khai (vì bạn không kiểm tra nghiêm ngặt đối với cùng một công cụ, mặc dù chúng phải tương đương).

Có một số cuộc thảo luận thêm về những điểm này here on a github issue about NUnit availability

26

ASP.NET đội từ Microsoft đã tạo ra một phiên bản đặc biệt của Moq để sử dụng nội bộ. Bạn có thể tìm thấy một dự án ngã ba trên asp.net github page.

Cách sử dụng?

  • Đăng ký một Moq phụ thuộc trong project.json:

    { 
        "frameworks": { 
         "dnx451": { 
          "dependencies": { 
           "Moq": "4.2.1312.1622" 
          } 
         }, 
         "dnxcore50": { 
          "dependencies": { 
           "moq.netcore": "4.4.0-beta8" 
          } 
         } 
        } 
    } 
    
  • Tạo một file NuGet.config trong thư mục chính của dự án.

    <?xml version="1.0" encoding="utf-8"?> 
        <configuration> 
         <packageSources> 
          <add key="AspNetVNext" value="https://www.myget.org/F/aspnetcidev/api/v3/index.json" /> 
          <add key="NuGet" value="https://api.nuget.org/v3/index.json" /> 
         </packageSources> 
        </configuration> 
    

Và sử dụng Moq!:)

+2

Tôi phải đặt giá trị AspNetVNext thành 'https: // www.myget.org/F/aspnet-contrib/api/v3/index.json' để tìm moq.netcore. –

+1

Chi tiết bổ sung về việc thêm nguồn cấp dữ liệu NuGet mới để thêm Moq vào dnxcore50 được cung cấp trong [blog của Armen Shimoon] (http://dotnetliberty.com/index.php/2016/02/22/moq-on-net-core/) (với hình ảnh!) – brntsllvn

+2

[asp.net github page] (https://github.com/aspnet/moq4) liên kết ở đầu câu trả lời này là 404 bị hỏng. – gerryLowry

0

Ref từ: https://neelbhatt40.wordpress.com/2016/10/15/moq-in-asp-net-core/

Bạn cần phải thêm dưới đây cấu hình trong project.json

{ 
    "version": "1.0.0-*", 
    "description": "AspNetCoreMoq.Test Class Library", 
    "authors": [ "armen" ], 
    "tags": [ "" ], 
    "projectUrl": "", 
    "licenseUrl": "", 

    "frameworks": { 
     "dnxcore50": { 
      "dependencies": { 
       "Microsoft.CSharp": "4.0.1-beta-23516", 
       "System.Collections": "4.0.11-beta-23516", 
       "System.Linq": "4.0.1-beta-23516", 
       "System.Runtime": "4.0.21-beta-23516", 
       "System.Threading": "4.0.11-beta-23516", 
       "AspNetCoreMoq": "", 
       "xunit": "2.1.0-rc1-build3168", 
       "xunit.runner.dnx": "2.1.0-rc1-build204", 
       "moq.netcore": "4.4.0-beta8" 
      } 
     } 
    }, 
    "commands": { 
     "test": "xunit.runner.dnx" 
    } 

} 

Và sau đó tạo NuGet ăn với bên dưới Url:

https://www.myget.org/F/aspnet-contrib/api/v3/index.json

Các vấn đề liên quan