---
title: "Remplacer une exception par un test"
type: "refactoring-technique"
slug: "replace-exception-with-test"
url: "http://localhost:3000/fr/replace-exception-with-test.md"
category: "Simplifying Method Calls"
description: "Problème : Vous levez une exception là où un simple test ferait l'affaire ? Solution : Remplacez l'exception par un test conditionnel."
languages: ["java", "csharp", "php", "python", "typescript"]
---
# Remplacer une exception par un test

> Problème : Vous levez une exception là où un simple test ferait l'affaire ? Solution : Remplacez l'exception par un test conditionnel.

## Problem

Vous levez une exception là où un simple test ferait l'affaire ?

## Solution

Remplacez l'exception par un test conditionnel.

## Why Refactor

Les exceptions doivent servir à gérer un comportement irrégulier lié à une erreur inattendue. Elles ne doivent pas remplacer un test. Si une exception peut être évitée en vérifiant simplement une condition avant l'exécution, alors faites-le. Les exceptions doivent être réservées aux véritables erreurs.

Par exemple, vous êtes entré dans un champ de mines et y avez déclenché une mine, provoquant une exception ; l'exception a été gérée avec succès et vous avez été projeté dans les airs jusqu'à un endroit sûr au-delà du champ de mines. Mais vous auriez pu éviter tout cela en lisant simplement le panneau d'avertissement placé à l'entrée du champ de mines.

## Benefits

* Une simple condition peut parfois être plus évidente que du code de gestion d'exceptions.

## How to Refactor

1. Créez une condition pour le cas limite et placez-la avant le bloc try/catch.
2. Déplacez le code de la section `catch` à l'intérieur de cette condition.
3. Dans la section `catch`, placez le code qui lève une exception habituelle anonyme et lancez tous les tests.
4. Si aucune exception n'a été levée pendant les tests, débarrassez-vous de l'instruction `try`/`catch`.
## Relations

**Similar techniques**

- [Remplacer un code d'erreur par une exception](/fr/replace-error-code-with-exception.md)

## Code Examples

### java

```java
// Before
double getValueForPeriod(int periodNumber) {
  try {
    return values[periodNumber];
  } catch (ArrayIndexOutOfBoundsException e) {
    return 0;
  }
}

// After
double getValueForPeriod(int periodNumber) {
  if (periodNumber >= values.length) {
    return 0;
  }
  return values[periodNumber];
}
```

### csharp

```csharp
// Before
double GetValueForPeriod(int periodNumber) 
{
  try 
  {
    return values[periodNumber];
  } 
  catch (IndexOutOfRangeException e) 
  {
    return 0;
  }
}

// After
double GetValueForPeriod(int periodNumber) 
{
  if (periodNumber >= values.Length) 
  {
    return 0;
  }
  return values[periodNumber];
}
```

### php

```php
// Before
function getValueForPeriod($periodNumber) {
  try {
    return $this->values[$periodNumber];
  } catch (ArrayIndexOutOfBoundsException $e) {
    return 0;
  }
}

// After
function getValueForPeriod($periodNumber) {
  if ($periodNumber >= count($this->values)) {
    return 0;
  }
  return $this->values[$periodNumber];
}
```

### python

```python
// Before
def getValueForPeriod(periodNumber):
    try:
        return values[periodNumber]
    except IndexError:
        return 0

// After
def getValueForPeriod(self, periodNumber):
    if periodNumber >= len(self.values):
        return 0
    return self.values[periodNumber]
```

### typescript

```typescript
// Before
getValueForPeriod(periodNumber: number): number {
  try {
    return values[periodNumber];
  } catch (ArrayIndexOutOfBoundsException e) {
    return 0;
  }
}

// After
getValueForPeriod(periodNumber: number): number {
  if (periodNumber >= values.length) {
    return 0;
  }
  return values[periodNumber];
}
```

