Я использовал FluentAssertions для своего модульного тестирования и начал проверять, правильно ли выдаются исключения. Я знаю, что могу использовать атрибут метода ExpectedExceptions
, но я хотел бы изучить подход FluentAssertion, если это возможно.
У меня есть класс Matrix
(упрощенный для этого примера) с перегруженным оператором умножения:
public class Matrix
{
public int Rows { get; set; }
public int Columns { get; set; }
public float[,] Elements { get; set; }
public static Matrix operator *(Matrix m1, Matrix m2)
{
if (m1.Columns != m2.Rows)
{
throw new Exception("These matrices cant be multiplied");
}
return new Matrix(1, 2, new float[,] { {1, 2} });
}
}
и я хотел бы проверить случай исключения. Это то, что у меня есть до сих пор:
[TestMethod]
//[ExpectedException(typeof(Exception), "These matrices cant be multiplied")]
public void MatrixMultiplication_IncorrectMatrixSize_ExceptionTest()
{
// Arrange
var elementsA = new float[,]
{
{4, 7},
{6, 8}
};
var elementsB = new float[,]
{
{3, 0},
{1, 1},
{5, 2}
};
Matrix A = new Matrix() {Rows=2, Columns=2, Elements=elementsA);
Matrix B = new Matrix() {Rows=3, Columns=2, Elements=elementsB);
// Act
Func<Matrix, Matrix, Matrix> act = (mA, mB) => mA * mB;
// Assert
act(A,B).ShouldThrow<Exception>().WithInnerMessage("These matrices cant be multiplied");
}
Проблема, с которой я столкнулся, заключается в том, что у FluentAssertions нет метода расширения ShouldThrow
для общего Func
, и я не уверен, можно ли и как обернуть это в действие. Можно ли использовать FluentAssertions таким образом для этой ситуации, или мне нужно использовать FluentAssertions по-другому, или мне придется использовать ExpectedExceptions
?
Action<Matrix, Matrix> act = (mA, mB) => { var x = mA * mB; }
) - person DavidG   schedule 07.04.2016Action
таким образом и использовать его вместоFunc
, но расширениеShouldThrow
по-прежнему не может быть применено. - person Ayb4btu   schedule 07.04.2016