Я использовал FluentAssertions для тестирования модулей и начал смотреть на то, правильно ли выбраны Исключения. Я знаю, что могу использовать атрибут метода ExpectedExceptions
, но я хотел бы изучить подход FluentAssertion, если это возможно.FluentAssertions Утверждение об исключении было брошено для перегруженного оператора
У меня есть 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
?
не поступаем [Docs] (https://github.com/dennisdoomen/fluentassertions/wiki # exceptions) объяснить это? – DavidG
(например, как действие: 'Action act = (mA, mB) => {var x = mA * mB;}') –
DavidG
@DavidG Я смотрел документы, но для меня это не было дайте понять, что я должен делать в этом конкретном случае. Вы правы, я могу написать «Действие» таким образом и использовать его вместо 'Func', но расширение' ShouldThrow' по-прежнему не может быть применено. – Ayb4btu