标签: fluent-assertions

如何使用流体断言.ShouldBeNull()

我正在尝试使用 Fluent Assertions ShouldBeNull() 扩展方法来断言我的实例确实为 null。

Result.ShouldBeNull();
Run Code Online (Sandbox Code Playgroud)

显然,这会引发异常,因为我无法在空实例上调用扩展。

System.NullReferenceException
Run Code Online (Sandbox Code Playgroud)

如何正确使用 Fluent Assertions 来做出此断言?

c# tdd nullreferenceexception fluent-assertions

2
推荐指数
1
解决办法
1333
查看次数

为什么流利的断言失败但断言传递给枚举?

我无法找到断言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)

c# assertion fluent-assertions

2
推荐指数
1
解决办法
96
查看次数

FluentAssertions:如何在每对元素上使用自定义比较来比较两个集合?

给定以下输入:

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)

c# unit-testing xunit assertion fluent-assertions

2
推荐指数
1
解决办法
2296
查看次数

如何使用 Fluent Assertions 抛出异常?

我正在使用客户端与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)

c# mqtt fluent-assertions

2
推荐指数
1
解决办法
3442
查看次数

流利断言:字典应该等效于排除字典值上的属性

我有一个名为 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)

c# linq nunit fluent-assertions

2
推荐指数
1
解决办法
2530
查看次数

我如何断言使用FluentAssertions将集合按2个属性排序?

我最近发现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个属性排序。这可能吗?

c# unit-testing fluent-assertions

1
推荐指数
1
解决办法
335
查看次数

FluentAssertions:int.Should().Equals返回错误的结果?

我刚开始使用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")比较?为什么它过去了?

谢谢

c# unit-testing moq fluent-assertions

1
推荐指数
1
解决办法
3502
查看次数

流畅的断言应该大于总是通过

我正在尝试使用以下方法测试我的集合:

  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。

.net c# unit-testing fluent-assertions

1
推荐指数
1
解决办法
3984
查看次数

FluentAssertions Should().BeEquivalentTo()失败,包含从相同接口派生的运行时指定类型的列表

我有以下测试说明了我试图实现的一个简单示例(两个等效列表的比较):

[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)

c# xunit fluent-assertions

1
推荐指数
1
解决办法
1011
查看次数

如何使用 FluentAssertions 编写 CustomAssertion?

有官方示例如何在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)

c# testing fluent-assertions

1
推荐指数
1
解决办法
412
查看次数