Вы должны тестировать свой метод в детерминированных обстоятельствах, то есть с набором аргументов, которые всегда возвращают один и тот же ответ. Если ваш метод иногда генерирует исключение, а иногда нет, у вас должен быть один тест для случаев, когда он выбрасывает, и другой для случаев, когда это не так.
Если у вас нет контроля над условиями, для которых вы вызываете исключение, это признак того, что вам нужно реорганизовать код, чтобы вы извлекли условие и смогли протестировать метод детерминистическим способом.
Например:
[TestMethod]
public void SomeMethodDoesntFail()
{
var obj = new objectUnderTest();
var shouldThrow = false;
var result = obj.SomeMethod(shouldThrow);
Assert.IsEqual(*expected result*, result);
}
[TestMethod, ExpectedException]
public void SomeMethodFails()
{
var obj = new objectUnderTest();
var shouldThrow = true;
var result = obj.SomeMethod(shouldThrow);
}