Как уже отмечал Хенк, подавление пользовательского интерфейса бесполезно, потому что вы хотите, чтобы ваш код не работал. Если вы не хотите изменять свой код, вы можете написать собственный прослушиватель трассировки, который выдает исключение, следующим образом:
public class ProductionTraceListener : DefaultTraceListener
{
public override void Fail(string message, string detailMessage)
{
string failMessage = message;
if (detailMessage != null)
{
failMessage += " " + detailMessage;
}
throw new AssertionFailedException(failMessage);
}
}
[Serializable]
public class AssertionFailedException : Exception
{
public AssertionFailedException() { }
public AssertionFailedException(string message) : base(message) { }
public AssertionFailedException(string message, Exception inner)
: base(message, inner) { }
protected AssertionFailedException(SerializationInfo info,
StreamingContext context) : base(info, context) { }
}
И вы можете зарегистрировать его следующим образом:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.diagnostics>
<trace>
<listeners>
<clear />
<add name="Default"
type="[Namespace].ProductionTraceListener, [Assembly]" />
</listeners>
</trace>
</system.diagnostics>
</configuration>
Как вы уже могли ожидать от имени слушателя трассировки ProductionTraceListener
, я использую эту вещь в своей производственной среде (веб-приложениях), а не в своих модульных тестах. Хотя вы можете использовать этот трюк в своих модульных тестах, я советую вам изменить свой код. IMO, вы должны использовать утверждения только для путей кода, которые никогда не должны запускаться, и если они это делают, тест должен провалиться. В вашей ситуации вы хотите пройти успешный тест при неудачном утверждении, что противоречит интуиции.
Мой совет - изменить код и использовать обычные if (x) throw ArgumentException()
проверки предварительных условий (или использовать CuttingEdge.Conditions ) и использовать эти утверждения только для путей кода, которые никогда не должны выполняться. Также попробуйте использовать Trace.Assert
вместо Debug.Assert
, поскольку вы также хотите, чтобы эти утверждения проверялись в вашей производственной среде. Когда вы это сделаете, вы можете использовать ProductionTraceListener
в своей производственной среде, а этот UnitTestTraceListener
в своих модульных тестах.
public class UnitTestTraceListener : DefaultTraceListener
{
public override void Fail(string message, string detailMessage)
{
string failMessage = message;
if (detailMessage != null)
{
failMessage += " " + detailMessage;
}
// Call to Assert method of used unit testing framework.
Microsoft.VisualStudio.TestTools.UnitTesting.Assert.Fail(
failMessage);
}
}
Удачи.