Unit-тест на ArgumentException или ArgumentNullException
Надо написать Unit-тест на проверку поведения на null
public string Сity
{
get => сity;
set => сity = value ??
throw new ArgumentNullException(paramName: nameof(value), message: "City cannot be null");
}
или на исключение с сообщением
public int Phone_number
{
get => phone_number;
set
{
if (Int32.TryParse(value.ToString(), out int resylt))
{
phone_number = resylt;
}
else
{
throw new ArgumentException("Phone number can contain only numbers");
}
}
}
Примерно такие тесты можно? Я не спец, только учусь) может подскажете более интересное решение.
[TestMethod()]
public void CheekName_name_nameRetyrned()
{
// Arrange
string x = "name";
string expected = "name";
// Action
Person p = new Person();
p.Name = x;
string actual = p.Name;
// Assert
Assert.AreEqual(expected, actual);
}
Ответы (1 шт):
Автор решения: Grundy
→ Ссылка
Для проверки ожидаемых исключений есть атрибут [ExpectedException].
Его можно использовать примерно так:
[TestMethod]
[ExpectedException(typeof(ArgumentNullException))
public void CheekName_name_nameRetyrned()
{
Person p = new Person();
p.City = null;
}
Однако в данном случае не проверяется само сообщение, только тип.
Аналогично можно использовать метод Assert.ThrowsException<T>
[TestMethod]
public void CheekName_name_nameRetyrned()
{
Person p = new Person();
Assert.ThrowsException<ArgumentNullException>(() => p.City = null);
}
Атрибутов для проверки сообщения исключения нет, однако, можно написать такой атрибут самому, унаследовавшись от ExpectedExceptionBaseAttribute и переопределив метод Verify
Например так:
class ExpectedExceptionWithMessage : ExpectedExceptionBaseAttribute
{
private Type expectedExceptionType;
private string expectedMessage;
public ExpectedExceptionWithMessage(Type expectedExceptionType, string expectedMessage)
{
this.expectedExceptionType = expectedExceptionType;
this.expectedMessage = expectedMessage;
}
protected override void Verify(Exception exception)
{
Assert.AreEqual(expectedExceptionType, exception.GetType());
// при использовании конструктора исключения с именем параметра
// к сообщению добавляется строка с указанием имени параметра
// чтобы она на влияла на проверку проверяем только первую строку сообщения
Assert.AreEqual(expectedMessage, exception.Message?.Split(Environment.NewLine)?[0]);
}
}
Использовать можно так:
[TestMethod]
[ExpectedExceptionWithMessage(typeof(ArgumentNullException), "City cannot be null")
public void CheekName_name_nameRetyrned()
{
Person p = new Person();
p.City = null;
}