我正在尝试使用 Fluent Assertions ShouldBeNull() 扩展方法来断言我的实例确实为 null。
Result.ShouldBeNull();
Run Code Online (Sandbox Code Playgroud)
显然,这会引发异常,因为我无法在空实例上调用扩展。
System.NullReferenceException
Run Code Online (Sandbox Code Playgroud)
如何正确使用 Fluent Assertions 来做出此断言?
我无法找到断言1失败但断言2通过的原因:
var a = Test.test1;
var b = Test.test1;
a.Should().BeSameAs(b); //1
Assert.Equal(a, b); //2
Run Code Online (Sandbox Code Playgroud)
Test 是一个像下面的枚举:
enum Test { test1, test2 }
Run Code Online (Sandbox Code Playgroud) 给定以下输入:
var customers = new[] {
new Customer { Name = "John", Age = 42 },
new Customer { Name = "Mary", Age = 43 }
};
var employees = new[] {
new Employee { FirstName = "John", Age = 42 },
new Employee { FirstName = "Mary", Age = 43 }
};
Run Code Online (Sandbox Code Playgroud)
使用 FluentAssertions 比较这些列表的最佳方法是什么?
我目前唯一的方法是这样的——与Enumerable.SequenceEqual非常相似:
using (var customerEnumerator = customers.GetEnumerator())
using (var employeeEnumerator = employees.GetEnumerator())
{
while (customerEnumerator.MoveNext())
{
employeeEnumerator.MoveNext().Should().BeTrue();
var (customer, employee) = (customerEnumerator.Current, employee.Current); …Run Code Online (Sandbox Code Playgroud) 我正在使用客户端与CloudMQTT API交互。我正在尝试创建一个用户,但在尝试下面提供的代码后,我无法创建用户。当使用该项目的 Github 存储库中提供的代码时,我注意到我无法使用方法ShouldThrow()(显然它应该由Fluent Assertions提供)。
我确实在 StackOverflow 上找到了一篇文章,它看起来与我遇到的问题非常相似。问题中提到 FluentAssertions 不支持异步方法。然而,在客户端的示例代码中,我可以看到无论ShouldThrow()这一事实如何,都使用了该方法。
我怎样才能让它ShoudldThrow()工作,或者我什至需要它工作(因为我认为只有在应用单元测试时才应该在这段代码中需要它)?
这是迄今为止尝试过的:
public static async void CreateCloudUser(ICloudMqttApi client)
{
var users = await client.GetUsers();
Console.WriteLine($"Creating a user. Current users available: {users.Count}");
var expectedUser = new NewUser
{
Password = $"{Guid.NewGuid()}",
Username = $"staging-{Guid.NewGuid()}",
};
var createUserResponse = await client.CreateUser(expectedUser);
createUserResponse.IsSuccessStatusCode.Should().BeTrue();
var actual = await client.GetUser(expectedUser.Username);
actual.Should().NotBeNull();
actual.Username.Should().Be(expectedUser.Username);
//users.Should().Contain(u => u.Username == expectedUser.Username); // <-- This …Run Code Online (Sandbox Code Playgroud) 我有一个名为 HandRank 的类,它有一个 Id 属性。Id 属性是由我的数据库生成的。
public class HandRank
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public int Rank { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我有一个名为 GetHandRanks 的方法,它返回一个Dictionary<string, HandRank>.
在我的测试中,我正在内存数据库中播种。由于 Id 属性是由数据库确定的,因此我希望将其从我的断言中排除。
下面是我的测试,但它失败了,因为 Id 属性未在预期结果中设置。我没有设置 Id,因为我不知道数据库生成时的 Id 是什么。
[Test]
public void Test()
{
// arrange
var expectedResult = new Dictionary<string, HandRank>
{
{ "aaa", new HandRank { Rank = 1} },
{ "bbb", new HandRank { Rank = 2} }
};
// act
var actualResult = …Run Code Online (Sandbox Code Playgroud) 我最近发现FluentAssertions有一个名为BeInAscendingOrder的集合断言。太棒了!
public class MyItems
{
public int SequenceNumber { get; set; }
public int Name { get; set; }
}
IList<int> resultingList = myClassUnderTest.GetOrderedList();
resultingList.Should().BeInAscendingOrder(m => m.SequenceNumber);
Run Code Online (Sandbox Code Playgroud)
但现在我想测试一个列表是否按2个属性排序。这可能吗?
我刚开始使用Moq&FluentAssertions并找到:
results.Results.Count.Should().Equals(1);
Run Code Online (Sandbox Code Playgroud)
在代码中,results.Results返回类List列表.在测试设置中,我将其设置为results.Results.Count = 3(我可以看到这个#在调试中也是正确的).但不知何故,上面的.Equals测试通过了.然后我把它改成了
results.Results.Count.Should().Equals("1");
Run Code Online (Sandbox Code Playgroud)
它仍然过去了.如果我使用它将失败
results.Results.Count.ShouldBeEquivalentTo(1);
Run Code Online (Sandbox Code Playgroud)
所以,问题是:
结果.Count.Should().等于("1")比较?为什么它过去了?
谢谢
我正在尝试使用以下方法测试我的集合:
var costByFactoryt = dataAccess.GetcostPerFactoryt(null, null);
costByFactoryt.Count().Should().BeGreaterThan(0);
costByFactoryt.Select(x => x.Cost.Should().BeGreaterThan(100));
Run Code Online (Sandbox Code Playgroud)
但问题是,如果我将最后一行代码更改为,
costByFactoryt.Select(x => x.Cost.Should().BeGreaterThan(1000));
Run Code Online (Sandbox Code Playgroud)
或者
costingByCircuit.Select(x => x.Cost.Should().BeLessThan(100));
Run Code Online (Sandbox Code Playgroud)
它仍然通过,这是错误的。
我想测试的是,所有成本应该大于100。
我有以下测试说明了我试图实现的一个简单示例(两个等效列表的比较):
[Fact]
public void Test()
{
// Arrange
var list1 = new List<IDomainEvent> { new BusinessCreatedDomainEvent { Name = "Microsoft" } };
var list2 = new List<IDomainEvent> { new BusinessCreatedDomainEvent { Name = "Microsoft" } };
// Act
// Assert
list1.Should().BeEquivalentTo(list2);
}
Run Code Online (Sandbox Code Playgroud)
理想情况下,每个列表应该能够包含从IDomainEvent界面派生的任意数量的不同类型的项目.测试目前失败.我怀疑它与Should().BeEquivalentTo不适合比较运行时指定的类型有关.我如何配置此示例,以便测试通过?
目前测试结果如下:
[8/14/2018 5:21:26 PM Error] [xUnit.net 00:00:00.7909767] BusinessWrite.UnitTests.Infrastructure.EventStoreUnitTests.Test [FAIL]
[8/14/2018 5:21:26 PM Informational] [xUnit.net 00:00:00.7922005] System.InvalidOperationException : No members were found for comparison. Please specify some members to include in the comparison or …Run Code Online (Sandbox Code Playgroud) 有官方示例如何在FluentAssertions docs 中创建 CustomAssertion ,但是我尝试应用它失败了。这是代码:
public abstract class BaseTest
{
public List<int> TestList = new List<int>() { 1, 2, 3 };
}
Run Code Online (Sandbox Code Playgroud)
public class Test : BaseTest { }
public class TestAssertions
{
private readonly BaseTest test;
public TestAssertions(BaseTest test)
{
this.test = test;
}
[CustomAssertion]
public void BeWorking(string because = "", params object[] becauseArgs)
{
foreach (int num in test.TestList)
{
num.Should().BeGreaterThan(0, because, becauseArgs);
}
}
}
Run Code Online (Sandbox Code Playgroud)
public class CustomTest
{
[Fact]
public void TryMe()
{
Test …Run Code Online (Sandbox Code Playgroud)