>

FluentAssertions 문서 에 CustomAssertion을 만드는 방법에 대한 공식적인 예가 있지만이를 적용하려는 시도가 실패합니다. 코드는 다음과 같습니다.

public abstract class BaseTest
{
    public List<int> TestList = new List<int>() { 1, 2, 3 };
}

<시간>

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);
        }
    }
}

<시간>
public class CustomTest
{
    [Fact]
    public void TryMe()
    {
        Test test = new Test();
        test.Should().BeWorking(); // error here
    }
}

컴파일 오류가 발생했습니다 :

CS1061 'ObjectAssertions' does not contain a definition for 'BeWorking' and no accessible extension method 'BeWorking' accepting a first argument of type 'ObjectAssertions' could be found (are you missing a using directive or an assembly reference?)

나는 또한 BeWorking 를 이동하려고   TestAssertions 에서   BaseTest 로  그러나 여전히 작동하지 않습니다. 무엇을 놓치고 어떻게 작동합니까?


  • 답변 # 1

    실제로 좋은 일을 했어요. :) 가장 중요한 것은 Extension 클래스입니다. 안내해 드리겠습니다.

    이 클래스 추가 :

    public static class TestAssertionExtensions
    {
        public static TestAssertions Should(this BaseTest instance)
        {
            return new TestAssertions(instance);
        }
    }
    
    

    TestAssertions 클래스를 다음과 같이 수정하십시오 :

    public class TestAssertions : ReferenceTypeAssertions<BaseTest, TestAssertions>
    {
        public TestAssertions(BaseTest instance) => Subject = instance;
        protected override string Identifier => "TestAssertion";
        [CustomAssertion]
        public AndConstraint<TestAssertions> BeWorking(string because = "", params object[] becauseArgs)
        {
            foreach (int num in Subject.TestList)
            {
                num.Should().BeGreaterThan(0, because, becauseArgs);
            }
            return new AndConstraint<TestAssertions>(this);
        }
    }
    
    

    지금 TryMe () 테스트가 정상적으로 작동합니다. 행운을 빈다.

  • 이전 arrays - ARRAYFORMULA가 포함 된 MAXIFS가 Google 스프레드 시트에서 작동하지 않습니다
  • 다음 ruby - 요리사의 런타임 예외 잡기