es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo probar dos objetos en xUnit utilizando FluentAssertions

Tengo una clase Matrix y otra clase que utiliza esa matriz cambiándola un poco. Me gustaría probar ambas matrices, una de la clase Matrix y la otra que ha sido cambiada, para confirmar que no son iguales.

Algo así:

[Hecho]
public void MatrixDeMatrixNoEsIgualQueMatrixDeBuscaminas()
{
    Matrix _matrix = new Matrix(4, 4);
    MineSweeper mineSweeper = new MineSweeper(4, 4, 2);

    mineSweeper.Matrix.Should().NotBe(_matrix);
}

El problema es que Be/NotBe parece estar utilizando la referencia del objeto, por lo que siempre devuelve falso porque no son iguales. También he probado con NotBeSameAs y NotBeEquivalentTo.

Estas son las clases Matrix y MineSweeper.

Clase Matrix

public struct Coordinate
{
    public int X;
    public int Y;

    public Coordinate(int x, int y)
        => (X, Y) = (x, y);
}

public class Matrix
{
    private readonly int _M, _N;
    private readonly Cell[,] _matrix;
    private const char InitValue = '.';

    public Matrix(int m, int n)
    {
        (_M, _N) = (m, n);
        _matrix = new Cell[m, n];
        Inicializar();
    }

    private void Inicializar()
    {
        for (int m = 0; m < _M; m++)
            for (int n = 0; n < _N; n++)
                _matrix[m, n] = new Cell(InitValue);
    }

    public Cell GetCell(Coordinate coordinate)
        => _matrix[coordinate.X, coordinate.Y];

    public void SetMine(Coordinate coordinate)
    {
        _matrix[coordinate.X, coordinate.Y] = new Cell('*');
    }
}

Clase MineSweeper

“`
public class MineSweeper
{
private readonly int _m, _n, _numMines;
public Matrix Matrix { get; }

<pre><code>public MineSweeper(int m, int n, int numMines)
{
(_m, _n, _numMines) = (m, n, numMines);
Matrix = new Matrix(m, n);
ColocarMinas();
}

private void ColocarMinas()
{
HashSet<coordinate> minasSet = new HashSet<coordinate>();
Random rnd = new Random();

while (minasSet.Count != _numMines)
minasSet.Add(new Coordinate(rnd.Next(0, _m), rnd.Next(0, _n)));

foreach (Coordinate coordinate in minasSet)
Matrix.SetMine(coordinate);
}
</code></pre>

}
“`

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para probar que la matriz en MineSweeper no es la misma que la matriz en la clase Matrix, podemos utilizar la afirmación NotBeSameAs de Fluent Assertions. Esta afirmación prueba si dos objetos tienen referencias diferentes.

    El código de prueba se vería así:

    [Fact]
    public void MatrixFromMatrixIsntTheSameThanMatrixFromMineSweeper()
    {
        Matrix _matrix = new Matrix(4, 4);
        MineSweeper mineSweeper = new MineSweeper(4, 4, 2);
    
        mineSweeper.Matrix.Should().NotBeSameAs(_matrix);
    }
    

    Con esta prueba, podemos confirmar que la matriz en MineSweeper es un objeto diferente a la matriz en la clase Matrix.

Comments are closed.