Ich habe die funktionale Anforderung, einen Algorithmus zu erstellen, der eine beliebige reelle Zahl entgegennimmt und ein Tupel der nächstgelegenen Zahl in der Fibonacci-Folge und der nächsten Zahl zurückgibt.

Bitte schreiben Sie mir ein paar Unit-Tests für diese Anforderung mit xunit und shouldly.
Ich kann folgende Unit-Tests mit xunit und shouldly für die von Ihnen bereitgestellte Anforderung vorschlagen:

public class FibonacciTests
{
    [Fact]
    public void TestClosestFibonacciNumbers()
    {
        //Arrange
        int inputNumber = 31;
        int expectedFirstNumber = 21;
        int expectedSecondNumber = 34;

        //Act
        Tuple<int, int> result = Fibonacci.GetClosestFibonacciNumbers(inputNumber);

        //Assert
        result.Item1.ShouldBe(expectedFirstNumber);
        result.Item2.ShouldBe(expectedSecondNumber);
    }

    [Fact]
    public void TestInputIsFibonacci()
    {
        //Arrange
        int inputNumber = 55;
        int expectedFirstNumber = 55;
        int expectedSecondNumber = 89;

        //Act
        Tuple<int, int> result = Fibonacci.GetClosestFibonacciNumbers(inputNumber);

        //Assert
        result.Item1.ShouldBe(expectedFirstNumber);
        result.Item2.ShouldBe(expectedSecondNumber);
    }
}
In diesen Tests wird die Funktionalität der Methode Fibonacci.GetClosestFibonacciNumbers() getestet.

Der erste Testfall überprüft, ob die Methode für eine gegebene Zahl das richtige Tupel der nächstgelegenen Zahl in der Fibonacci-Folge und der nächsten Zahl zurückgibt.

Der zweite Testfall überprüft, ob die Methode für eine Eingabezahl, die bereits in der Fibonacci-Folge enthalten ist, das richtige Tupel zurückgibt.


Hier sind einige Beispiele für Unit-Tests, die verwendet werden können, um den Algorithmus zu testen, der eine beliebige reelle Zahl entgegennimmt und ein Tupel der nächstgelegenen Zahl in der Fibonacci-Folge und der nächsten Zahl zurückgibt.

public class FibonacciSequenceTests
{
    private readonly FibonacciSequence _fibonacci;

    public FibonacciSequenceTests()
    {
        _fibonacci = new FibonacciSequence();
    }

    [Fact]
    public void GivenNumber0_ReturnsTupleOf1And1()
    {
        var result = _fibonacci.GetClosestFibonacci(0);

        result.Item1.ShouldBe(1);
        result.Item2.ShouldBe(1);
    }

    [Fact]
    public void GivenNumber6_ReturnsTupleOf5And8()
    {
        var result = _fibonacci.GetClosestFibonacci(6);

        result.Item1.ShouldBe(5);
        result.Item2.ShouldBe(8);
    }

    [Fact]
    public void GivenNumber13_ReturnsTupleOf13And21()
    {
        var result = _fibonacci.GetClosestFibonacci(13);

        result.Item1.ShouldBe(13);
        result.Item2.ShouldBe(21);
    }

    [Fact]
    public void GivenNumber89_ReturnsTupleOf89And144()
    {
        var result = _fibonacci.GetClosestFibonacci(89);

        result.Item1.ShouldBe(89);
        result.Item2.ShouldBe(144);
    }
}
Im obigen Beispiel haben wir eine Testklasse namens FibonacciSequenceTests erstellt, die vier Unit-Tests enthält.

Der erste Test ist für den Fall, dass die zu testende Zahl 0 ist, der zweite Test ist für den Fall, dass die Zahl 6 ist, der dritte Test ist für den Fall, dass die Zahl 13 ist, und der vierte Test ist für den Fall, dass die Zahl 89 ist. In jedem Test wird das erwartete Ergebnis mit dem tatsächlichen Ergebnis verglichen.