Skip to content

Commit 5b7ec37

Browse files
author
davidwei
committed
Enhance CustomException with flexible message handling and add tests
1 parent 0f5e3a6 commit 5b7ec37

File tree

3 files changed

+89
-4
lines changed

3 files changed

+89
-4
lines changed

src/Api.Framework/Exceptions/CustomException.cs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,13 @@
22

33
namespace Api.Framework.Exceptions;
44

5-
public class CustomException<T>(Exception? innerException = default)
6-
: Exception("A custom exception happened", innerException)
5+
public class CustomException<T> : Exception
76
{
7+
public CustomException(string? message = null, Exception? innerException = null)
8+
: base(message ?? innerException?.Message ?? "A custom exception happened", innerException)
9+
{
10+
}
11+
812
public FailedResult<T>? CustomData { get; set; }
913

1014
// Override ToString() method to provide more detailed exception information

src/Api.Framework/Helper/CustomExceptionHelper.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ public static class CustomExceptionHelper
1515
public static CustomException<TData> New<TData>(TData data, string errorMessage, params object[] extraObjects)
1616
{
1717
var message = string.Format(errorMessage, extraObjects);
18-
return new CustomException<TData>
18+
return new CustomException<TData>(message)
1919
{
2020
CustomData = ResultHelper.New(data, FrameworkConstants.DefaultErrorCode, message)
2121
};
@@ -33,7 +33,7 @@ public static CustomException<TData> New<TData>(TData data, string errorMessage,
3333
public static CustomException<TData> New<TData>(TData data, int errorCode, string errorMessage, params object[] extraObjects)
3434
{
3535
var message = string.Format(errorMessage, extraObjects);
36-
return new CustomException<TData>
36+
return new CustomException<TData>(message)
3737
{
3838
CustomData = ResultHelper.New(data, errorCode, message)
3939
};
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
using Api.Framework.Exceptions;
2+
using Api.Framework.Helper;
3+
4+
namespace Api.Framework.Tests;
5+
6+
[TestFixture]
7+
public class CustomExceptionTests
8+
{
9+
[Test]
10+
public void CustomException_WithMessage_SetsCorrectExceptionMessage()
11+
{
12+
// Arrange
13+
const string expectedMessage = "Test error message";
14+
15+
// Act
16+
var exception = new CustomException<object>(expectedMessage);
17+
18+
// Assert
19+
Assert.That(exception.Message, Is.EqualTo(expectedMessage));
20+
}
21+
22+
[Test]
23+
public void CustomException_WithNullMessage_UsesDefaultMessage()
24+
{
25+
// Arrange & Act
26+
var exception = new CustomException<object>();
27+
28+
// Assert
29+
Assert.That(exception.Message, Is.EqualTo("A custom exception happened"));
30+
}
31+
32+
[Test]
33+
public void CustomException_WithInnerExceptionButNoMessage_UsesInnerExceptionMessage()
34+
{
35+
// Arrange
36+
const string innerMessage = "Inner exception message";
37+
var innerException = new InvalidOperationException(innerMessage);
38+
39+
// Act
40+
var exception = new CustomException<object>(null, innerException);
41+
42+
// Assert
43+
Assert.That(exception.Message, Is.EqualTo(innerMessage));
44+
Assert.That(exception.InnerException, Is.EqualTo(innerException));
45+
}
46+
47+
[Test]
48+
public void CustomExceptionHelper_New_CreatesExceptionWithCorrectMessage()
49+
{
50+
// Arrange
51+
const string errorMessage = "Note with id {0} not found";
52+
const long noteId = 123L;
53+
const string expectedMessage = "Note with id 123 not found";
54+
55+
// Act
56+
var exception = CustomExceptionHelper.New("test data", errorMessage, noteId);
57+
58+
// Assert
59+
Assert.That(exception.Message, Is.EqualTo(expectedMessage));
60+
Assert.That(exception.CustomData?.Message, Is.EqualTo(expectedMessage));
61+
}
62+
63+
[Test]
64+
public void CustomExceptionHelper_NewWithErrorCode_CreatesExceptionWithCorrectMessage()
65+
{
66+
// Arrange
67+
const string errorMessage = "User {0} has {1} notes";
68+
const int errorCode = 100;
69+
const string userName = "testuser";
70+
const int noteCount = 5;
71+
const string expectedMessage = "User testuser has 5 notes";
72+
73+
// Act
74+
var exception = CustomExceptionHelper.New("test data", errorCode, errorMessage, userName, noteCount);
75+
76+
// Assert
77+
Assert.That(exception.Message, Is.EqualTo(expectedMessage));
78+
Assert.That(exception.CustomData?.Message, Is.EqualTo(expectedMessage));
79+
Assert.That(exception.CustomData?.ErrorCode, Is.EqualTo(errorCode));
80+
}
81+
}

0 commit comments

Comments
 (0)