![](/img/trans.png)
[英]Error when using RazorTemplates library: 'CS0012: The type 'System.Attribute' is defined in an assembly that is not referenced'
[英]FluentAssertions error CS0012: You must add a reference to assembly System.Data
我在使用 .NET Framework 4.6.1 的測試項目中添加了 nuget FluentAssertions 6.7.0 。 我從 Rider 2022.1.1 運行測試。
我是這個 nuget 的新手,我閱讀了介紹並搜索了問題(未找到)。 我來自應該家庭並試圖升級。
我不能用基本的斷言來構建。 這是初始代碼:
using FluentAssertions;
using Moq;
using System;
using Xunit;
public class MyTestClass
{
[Fact]
public void GetProvider_ByRemoteName_Works()
{
// input
var desiredRemoteName = "Remote2";
// prepare
var context = Context.New(); // mocks and stubs
// execute
var result = context.SomeService.GetProvider(desiredRemoteName);
// verify
result.Should().NotBeNull(); // error line
result.Should().BeOfType<MyProviderClient>(); // error line
}
構建錯誤是:
錯誤 CS0012:“DataTable”類型是在未引用的程序集中定義的。 您必須添加對程序集“System.Data,Version=0.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089”的引用。
錯誤 CS0012:“DataColumn”類型是在未引用的程序集中定義的。 您必須添加對程序集“System.Data,Version=0.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089”的引用。
...
錯誤 CS0012:“DataRow”類型是在未引用的程序集中定義的。 您必須添加對程序集“System.Data,Version=0.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089”的引用。
我不明白為什么我應該引用這個“System.Data”程序集。 這似乎不合法。 如果我確實引用它:
MyTestClass.cs:[CS0121] 以下方法或屬性之間的調用不明確:“DataRowAssertionExtensions.Should(TDataRow)”和“DataSetAssertionExtensions.Should(TDataSet)”
此外,刪除錯誤行並using
行提供了有效的構建和測試運行。
此外,IDE 編輯器指示:
以下方法或屬性之間的調用不明確:“DataRowAssertionExtensions.Should(TDataRow)”和“DataSetAssertionExtensions.Should(TDataSet)”
此外,使用 Xunit 的斷言有效:
// verify
Assert.NotNull(result);
Assert.IsType<MyProviderClient>(result);
跟進您的評論,讓我們考慮這個更新的代碼:
// execute
object result = context.SomeService.GetProvider(desiredRemoteName);
// verify
result.Should().BeAssignableTo<IMyInterface>()
.And.BeOfType<SomeImplementation>()
.Which
.Configuration
.Should() // error line
.NotBeNull();
在最新的.Should()
調用中也會出現同樣的錯誤。
MyTestClass.cs:[CS0121] 以下方法或屬性之間的調用不明確:“DataRowAssertionExtensions.Should(TDataRow)”和“DataSetAssertionExtensions.Should(TDataSet)”
使用 FluentAssertions 執行.BeOfType<>().Which
到處都是? 我覺得我這邊或庫的工作方式有問題。
您列出的 IDE 錯誤表明編譯器不知道要調用哪個.Should()
重載。 對於任何依賴重載解析的庫來說,這並不罕見。
由於看起來您只是打算在此上下文中測試返回類型,因此您只“需要” .Should .Should()
的ObjectAssertions
重載。 因此,一種方法可以避免這樣的模棱兩可的調用:
object result = context.SomeService.GetProvider(desiredRemoteName);
result.Should().BeOfType<MyProviderClient>() // Chained FA assertions are now typed as MyProviderClient
.Which.Should().BeEquivalentTo(new { Foo = "bar" });
請記住,值null
沒有運行時類型,因此斷言對象具有某些特定的運行時類型隱式斷言它不是 null。 如果斷言空引用,FA 的.BeOfType<T>()
斷言將失敗並顯示特定消息。
我記得,.NET Framework 4.6.1 存在一個奇怪的問題,即沒有自動添加對System.Data
的程序集引用。 對於較新的框架版本,它會自動發生。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.