Как уже заметил Хенк, подавление пользовательского интерфейса бесполезно, потому что вы хотите, чтобы ваш код не работал. Если вы не хотите изменять свой код, вы можете написать собственный прослушиватель трассировки, который выдает исключение, следующим образом:
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);
}
}
Удачи.
person
Steven
schedule
26.02.2010