C # Обработка исключений на класс -- c# поле с участием wcf поле с участием unit-testing поле с участием exception пол Связанный проблема

c# class-wide exception handling


0
vote

проблема

русский

Можно ли удалить исключения в одном месте в файле класса C #?

Я кодирую некоторые модульные тесты в NUNIT для проверки веб-службы WCF, и на всех методах / тестах хочет поймать «EndPointNotfoundException» без необходимости кодировать это для каждого теста.

Редактировать

Думаю, я хотел создать описательную ошибку в этом случае без необходимости поместить дополнительный блок Catch в каждом методе, так как я действительно хочу, чтобы тест провалился.

Как я сделал что-то похожее на это в WCF с FaiTexception, мне было интересно узнать, было ли это возможно в общем с классами C #

Но нижняя строка заключается в том, что если он не удается, не удается! Благодаря @truewill за заявление очевидного;) и @abhieet patel за то, что заставить меня думать больше о том, как я структурирую свои модульные тесты

(ой и извинения за ответ на мой собственный вопрос;)

Английский оригинал

Is it possible to catch exceptions in a single place in a c# class file?

I'm coding some unit tests in NUnit to test for a WCF Web-Service, and on all methods/tests want to trap a "EndpointNotFoundException" without having to code this for each test.

edit

I guess i wanted to create a descriptive error in this case without having to put an additional catch block in each method, as i do indeed want the test to fail.

As i've done something similar to this in WCF with the FaultException i was interested to know if it was possible in general with C# classes

But the bottom line is that if it fails, it fails! thanks to @TrueWill for stating the obvious ;) and to @Abhijeet Patel for making me think more about how i structure my unit tests

(oh, and apologies for answering my own question ;)

</div
           
   
   

Список ответов

3
 
vote

в General , нет - вы можете поймать только локально. Существуют разные случаи Исключения , когда вы можете сделать это - ASP.NET MVC контроллеры и WCF Services являются двумя примерами, которые прыгают на ум, где обрабатывается ошибка (или легко < EM> достаточно отделен.

Но в вашем случае - разве вы не хотите добавить <код> [ExpectedException(...)] на затронутые тесты?

 

In general, no - you can only catch locally. There are isolated exceptions occasions when you can do this - ASP.NET MVC controllers and WCF services being two examples that leap to mind where the error handling can easily (or easily enough) separated.

But in your case - don't you just want to add [ExpectedException(...)] to the affected tests?

</div
 
 
 
 
2
 
vote

Вы можете использовать aop для достижения этого. Идея заключается в том, что вы запрашиваете, чтобы приложить некоторое поведение (обращение с исключением в этом случае) ко всем методам в классе.

Например, используя postsharp , вы можете определить следующий «Обработчик исключений»:

 <код> [Serializable] class EndpointNotFoundExceptionHandlerAspect : OnExceptionAspect {     public override void OnException(MethodExecutionEventArgs eventArgs)     {         if (eventArgs.Exception is EndpointNotFoundException)             eventArgs.FlowBehavior = FlowBehavior.Continue; // continue without throwing an exception         else             base.OnException(eventArgs);     } }   

Затем добавьте <код> EndpointNotFoundExceptionHandlerAspect к определению вашего класса. Тогда каждый раз <код> EndpointNotFoundException брошен, он будет "обработан".

Примечание: я не претензию, что это хорошая идея. Это просто пример , как это может быть достигнуто.

 

You can use AOP to achieve this. The idea is, as you request, to attach some behaviour (exception handling in this case) to all methods in the class.

For example, using PostSharp, you can define the following "exception handler":

[Serializable] class EndpointNotFoundExceptionHandlerAspect : OnExceptionAspect {     public override void OnException(MethodExecutionEventArgs eventArgs)     {         if (eventArgs.Exception is EndpointNotFoundException)             eventArgs.FlowBehavior = FlowBehavior.Continue; // continue without throwing an exception         else             base.OnException(eventArgs);     } } 

Then add the EndpointNotFoundExceptionHandlerAspect to your class definition. Then every time the EndpointNotFoundException is thrown, it will be "handled".

Note: I make no claims that this is a good idea. This is merely an example of how it can be achieved.

</div
 
 
2
 
vote

Возможно, лучший подход будет посмотреть в инъекцию кода обработки исключений с помощью AOP (PostSharp) или впрыска политики?

afaik, что вы пытаетесь сделать, это невозможно. Вы можете посмотреть в Application.Threadexception и appdomain.currentDomain.unhandledexception для централизованного обращения с исключением.

 

Perhaps a better approach would be to look into injecting the exception handling code with AOP (postsharp) or policy injection?

AFAIK, what you are trying to do is not possible. You can look into Application.ThreadException and AppDomain.CurrentDomain.UnhandledException for centralized exception handling.

</div
 
 
1
 
vote

Ориентированное на аспект Программирование может быть сделано для обработки одного типа исключения, такими как EndPointNotFountException .. И исключение может быть зарегистрировано где-то, используя это ..

 

Aspect oriented programming can be done to handle a single type of exception like EndpointNotFoundException..and the exception can be logged somewhere using that..

</div
 
 
1
 
vote

Подход, который я взял на такую ​​проблему, предоставляет <код> InvokeAction метода, который позволяет вам управлять обработкой исключения в относительно единой единой форме. Это зависит от каждого из ваших методов, имеющих аналогичную подпись, тем не менее, естественным образом вы можете предоставить больше подписей, чтобы покрыть эти другие действия:

 <код> private void InvokeAction (Action<TData> action, data) {     try     {         action(data);     }     catch (EndpointNotFoundException enfe)     {         .... unified handling here     }     catch (OtherExceptionType oet)     {     } }   

Использование этого подхода, который вы можете позвонить в ваши методы обслуживания, которые все будут иметь ту же попробовать вызов блока.

e.g. <Код> InvokeAction(AddUser, userData);

e.g. <Код> InvokeAction(UpdateUser, userData);

 

An approach I've taken to this sort of problem is by providing an InvokeAction method which allows you to manage your exception handling in a relatively unified way. This does rely on each of your methods having a similar signature however, naturally you can provide more signatures to cover these other actions:

private void InvokeAction (Action<TData> action, data) {     try     {         action(data);     }     catch (EndpointNotFoundException enfe)     {         .... unified handling here     }     catch (OtherExceptionType oet)     {     } } 

Using this approach you can then make a call to your service methods which will all have the same try catch block invocation.

e.g. InvokeAction(AddUser, userData);

e.g. InvokeAction(UpdateUser, userData);

</div
 
 
0
 
vote

Вам придется создать механизм для ведения журнала (или использовать третьейную реализацию, такую ​​как Log4net), и вставить блоки для улов. Везде, где исключения зарегистрированы. Другими словами, нет.

 

You'll have to create a logging mechanism (or use a third party implementation like log4net) and insert catch blocks everywhere, where the exceptions are logged. In other words, no.

</div
 
 
0
 
vote

Как уже отметили MARC, используя [indevenceException] на тесте устройства, по-видимому, является наиболее логичным способом, особенно для модульных тестов, где вы хотите сосредоточиться на устройстве функциональности. Если вы делаете много попробовать ... CALL CHALL Обработка в стиле и условная проверка, затем ваш модульный тест не является тестом устройства

 

As Marc already pointed out, using an [ExpectedException] on the unit test seems to be the most logical way to go especially for unit tests, where you want to focus on a unit of functionality. if you are doing a lot of try...catch style processing and conditional checking then your unit test isn't really a unit test

</div
 
 

Связанный проблема

5  Сделать структуру сущности быть нечувствительными к регистру  ( Make entity framework be case insensitive ) 
Возможно ли установить корпус строки структуры объекта нечувствителен по умолчанию? Если я использую <код> string.StartsWith("stringToCompare", StringComp...

1  Разница между несколькими наследованиями и интерфейсами в C #  ( Difference between multiple inheritance and interfaces in c sharp ) 
делает C # действительно поддерживать многократное наследование. Люди говорят, что он поддерживает многократное наследование в виде интерфейсов? Но я не думаю...

5  Лучшие практики для сканирования всех классов и методов для пользовательского атрибута  ( Best practices to scan all classes and methods for custom attribute ) 
Впервые я действительно должен был сделать сканирование сборки вручную. Я столкнулся с C # - Как перечислять все классы с атрибутом пользовательского класса?...

2  Высевание многих для многих кода EF первые отношения  ( Seeding many to many ef code first relationship ) 
Есть несколько других сообщений по этой теме, которую я видел, но я не смог получить правильный ответ еще (моя собственная вина, я уверен), но я хочу сеять ба...

0  NU1701, NU1202 Восстановление пакета Восстановление на свежей установке Windows / VS  ( Nu1701 nu1202 package restore errors on fresh windows vs setup ) 
Работа в команде, у нас есть решение в Git, который разрабатывается на 3 разных DEV. Я временно ушел на разное место с моим ноутбуком, где у меня свежая Win 1...

3  Представление строки в C #  ( String representation in c sharp ) 
IM TRING, чтобы взять на себя текст из существующей веб-страницы, используя этот метод: <код> try { WebClient client = new WebClient(...

0  Wpf keypreview windows ключ и второй ключ  ( Wpf keypreview windows key and second key ) 
Я реализую приложение WPF в C # 4.5 для Windows 7, и я хотел бы иметь возможность схватить событие, когда пользователь нажимает клавишу Windows и C. Я реали...

1  Mongodb C # LINQ сгерированный запрос  ( Mongodb c sharp linq generated query ) 
Как я могу получить сгенерированный запрос из запроса LINQ? Я попробовал это, но это не работало: <код> var query = ( from d in mcollection.AsQu...

1  Как довольно печатать метод итератора  ( How to pretty print the iterator method ) 
Я хочу получить имя метода со своими аргументами метода итератора и я борюсь, чтобы найти простое решение. Итераторы генерируются компилятором в результате. И...

0  Очистите DataTable в петле Перемещение используемых элементов к двум другим источникам данных [дубликат]  ( Clean a datatable in a loop moving used items to two other datatables ) 
<в сторону CLASS = "S-NEWACTS S-WELTIVE__info JS-Post-New Imide MB16« Роль = «Статус»> Этот вопрос уже имеет ответ здесь : ...

0  Событие ListBox после сканирования штрих-кода  ( Listbox event after barcode scanning ) 
Я использую ListBox в окне приложение, мой список имеет некоторое количество штрих-кодов. Я хочу отсканировать их с помощью Reader barcode, а затем хочу пер...

-2  Гольф HCP Calculator  ( Golf hcp calculator ) 
Я работаю над программой в ASP.NET MVC, где моя цель - сделать показатель для гольфа. в Golf у каждого игрока есть гандикап, который дает им ряд дополнитель...

2  C #, Linq2SQL - трюки для получения объекта ViewModel с данными соотношения?  ( C linq2sql tricks to fetch a viewmodel object with relation data ) 
Я не знаю linq2sql так хорошо, и мне было интересно, есть ли трюк для этого, вероятно, общий сценарий MVVM. У меня есть контекст данных Linq2SQL, содержащий м...

1  Включить первый случай исключений для определенного куска кода  ( Enable first chance exceptions for specific piece of code ) 
Мне нужна Visual Studio, чтобы бросить первые шансы исключения только для определенного класса. Если я включаю первый случай исключения в Visual Studio, он ...

2  Обработка ошибок в свойствах, я знаю, что это плохо, нужно исправить, хотя  ( Error handling in properties i know its bad need fix though ) 
Я знаю свою плохую практику, чтобы поставить обработку ошибок в свойствах, я просто хочу знать , где я должен положить ошибку обработки ошибок. Я знаю, что з...

Связанный проблема

5  Сделать структуру сущности быть нечувствительными к регистру 
1  Разница между несколькими наследованиями и интерфейсами в C # 
5  Лучшие практики для сканирования всех классов и методов для пользовательского атрибута 
2  Высевание многих для многих кода EF первые отношения 
0  NU1701, NU1202 Восстановление пакета Восстановление на свежей установке Windows / VS 
3  Представление строки в C # 
0  Wpf keypreview windows ключ и второй ключ 
1  Mongodb C # LINQ сгерированный запрос 
1  Как довольно печатать метод итератора 
0  Очистите DataTable в петле Перемещение используемых элементов к двум другим источникам данных [дубликат] 
0  Событие ListBox после сканирования штрих-кода 
-2  Гольф HCP Calculator 
2  C #, Linq2SQL - трюки для получения объекта ViewModel с данными соотношения? 
1  Включить первый случай исключений для определенного куска кода 
2  Обработка ошибок в свойствах, я знаю, что это плохо, нужно исправить, хотя 



© 2021 www.qaru.top All Rights Reserved. Q&A House все права защищены


Licensed under cc by-sa 3.0 with attribution required.