Skip to content

Commit 6b21e82

Browse files
Copilottimcassell
andcommitted
Consolidate tests as theories and use base mock diagnoser
Co-authored-by: timcassell <35501420+timcassell@users.noreply.github.com>
1 parent 33f392c commit 6b21e82

File tree

2 files changed

+126
-210
lines changed

2 files changed

+126
-210
lines changed

tests/BenchmarkDotNet.IntegrationTests/Diagnosers/MockInProcessDiagnoser.cs

Lines changed: 55 additions & 93 deletions
Original file line numberDiff line numberDiff line change
@@ -11,145 +11,107 @@
1111

1212
namespace BenchmarkDotNet.IntegrationTests.Diagnosers;
1313

14-
public sealed class MockInProcessDiagnoser : IInProcessDiagnoser
14+
public abstract class BaseMockInProcessDiagnoser : IInProcessDiagnoser
1515
{
1616
public Dictionary<BenchmarkCase, string> Results { get; } = [];
1717

18-
public IEnumerable<string> Ids => [nameof(MockInProcessDiagnoser)];
18+
public abstract string DiagnoserName { get; }
19+
public abstract RunMode DiagnoserRunMode { get; }
20+
public abstract Type HandlerType { get; }
21+
public abstract string ExpectedResult { get; }
22+
23+
public IEnumerable<string> Ids => [DiagnoserName];
1924

2025
public IEnumerable<IExporter> Exporters => [];
2126

2227
public IEnumerable<IAnalyser> Analysers => [];
2328

24-
public void DisplayResults(ILogger logger) => logger.WriteLine($"{nameof(MockInProcessDiagnoser)} results: [{string.Join(", ", Results.Values)}]");
29+
public void DisplayResults(ILogger logger) => logger.WriteLine($"{DiagnoserName} results: [{string.Join(", ", Results.Values)}]");
2530

26-
public RunMode GetRunMode(BenchmarkCase benchmarkCase) => RunMode.NoOverhead;
31+
public RunMode GetRunMode(BenchmarkCase benchmarkCase) => DiagnoserRunMode;
2732

2833
public void Handle(HostSignal signal, DiagnoserActionParameters parameters) { }
2934

3035
public IEnumerable<Metric> ProcessResults(DiagnoserResults results) => [];
3136

3237
public IEnumerable<ValidationError> Validate(ValidationParameters validationParameters) => [];
3338

34-
public (Type? handlerType, string? serializedConfig) GetSeparateProcessHandlerTypeAndSerializedConfig(BenchmarkCase benchmarkCase)
35-
=> (typeof(MockInProcessDiagnoserHandler), null);
39+
public virtual (Type? handlerType, string? serializedConfig) GetSeparateProcessHandlerTypeAndSerializedConfig(BenchmarkCase benchmarkCase)
40+
=> (HandlerType, null);
3641

37-
public IInProcessDiagnoserHandler? GetSameProcessHandler(BenchmarkCase benchmarkCase)
38-
=> new MockInProcessDiagnoserHandler();
42+
public virtual IInProcessDiagnoserHandler? GetSameProcessHandler(BenchmarkCase benchmarkCase)
43+
=> (IInProcessDiagnoserHandler)Activator.CreateInstance(HandlerType, ExpectedResult);
3944

4045
public void DeserializeResults(BenchmarkCase benchmarkCase, string results) => Results.Add(benchmarkCase, results);
4146
}
4247

43-
public sealed class MockInProcessDiagnoserHandler : IInProcessDiagnoserHandler
48+
public abstract class BaseMockInProcessDiagnoserHandler : IInProcessDiagnoserHandler
4449
{
50+
private readonly string _result;
51+
52+
protected BaseMockInProcessDiagnoserHandler(string result) => _result = result;
53+
4554
public void Initialize(string? serializedConfig) { }
4655

4756
public void Handle(BenchmarkSignal signal, InProcessDiagnoserActionArgs args) { }
4857

49-
public string SerializeResults() => "MockResult";
58+
public string SerializeResults() => _result;
5059
}
5160

52-
public sealed class MockInProcessDiagnoserNoOverhead : IInProcessDiagnoser
61+
public sealed class MockInProcessDiagnoser : BaseMockInProcessDiagnoser
5362
{
54-
public Dictionary<BenchmarkCase, string> Results { get; } = [];
55-
56-
public IEnumerable<string> Ids => [nameof(MockInProcessDiagnoserNoOverhead)];
57-
58-
public IEnumerable<IExporter> Exporters => [];
59-
60-
public IEnumerable<IAnalyser> Analysers => [];
61-
62-
public void DisplayResults(ILogger logger) => logger.WriteLine($"{nameof(MockInProcessDiagnoserNoOverhead)} results: [{string.Join(", ", Results.Values)}]");
63-
64-
public RunMode GetRunMode(BenchmarkCase benchmarkCase) => RunMode.NoOverhead;
65-
66-
public void Handle(HostSignal signal, DiagnoserActionParameters parameters) { }
67-
68-
public IEnumerable<Metric> ProcessResults(DiagnoserResults results) => [];
69-
70-
public IEnumerable<ValidationError> Validate(ValidationParameters validationParameters) => [];
71-
72-
public (Type? handlerType, string? serializedConfig) GetSeparateProcessHandlerTypeAndSerializedConfig(BenchmarkCase benchmarkCase)
73-
=> (typeof(MockInProcessDiagnoserNoOverheadHandler), null);
74-
75-
public IInProcessDiagnoserHandler? GetSameProcessHandler(BenchmarkCase benchmarkCase)
76-
=> new MockInProcessDiagnoserNoOverheadHandler();
77-
78-
public void DeserializeResults(BenchmarkCase benchmarkCase, string results) => Results.Add(benchmarkCase, results);
63+
public override string DiagnoserName => nameof(MockInProcessDiagnoser);
64+
public override RunMode DiagnoserRunMode => RunMode.NoOverhead;
65+
public override Type HandlerType => typeof(MockInProcessDiagnoserHandler);
66+
public override string ExpectedResult => "MockResult";
7967
}
8068

81-
public sealed class MockInProcessDiagnoserNoOverheadHandler : IInProcessDiagnoserHandler
69+
public sealed class MockInProcessDiagnoserHandler : BaseMockInProcessDiagnoserHandler
8270
{
83-
public void Initialize(string? serializedConfig) { }
84-
85-
public void Handle(BenchmarkSignal signal, InProcessDiagnoserActionArgs args) { }
86-
87-
public string SerializeResults() => "NoOverheadResult";
71+
public MockInProcessDiagnoserHandler(string result) : base(result) { }
8872
}
8973

90-
public sealed class MockInProcessDiagnoserExtraRun : IInProcessDiagnoser
74+
public sealed class MockInProcessDiagnoserNoOverhead : BaseMockInProcessDiagnoser
9175
{
92-
public Dictionary<BenchmarkCase, string> Results { get; } = [];
93-
94-
public IEnumerable<string> Ids => [nameof(MockInProcessDiagnoserExtraRun)];
95-
96-
public IEnumerable<IExporter> Exporters => [];
97-
98-
public IEnumerable<IAnalyser> Analysers => [];
99-
100-
public void DisplayResults(ILogger logger) => logger.WriteLine($"{nameof(MockInProcessDiagnoserExtraRun)} results: [{string.Join(", ", Results.Values)}]");
101-
102-
public RunMode GetRunMode(BenchmarkCase benchmarkCase) => RunMode.ExtraRun;
103-
104-
public void Handle(HostSignal signal, DiagnoserActionParameters parameters) { }
105-
106-
public IEnumerable<Metric> ProcessResults(DiagnoserResults results) => [];
107-
108-
public IEnumerable<ValidationError> Validate(ValidationParameters validationParameters) => [];
109-
110-
public (Type? handlerType, string? serializedConfig) GetSeparateProcessHandlerTypeAndSerializedConfig(BenchmarkCase benchmarkCase)
111-
=> (typeof(MockInProcessDiagnoserExtraRunHandler), null);
112-
113-
public IInProcessDiagnoserHandler? GetSameProcessHandler(BenchmarkCase benchmarkCase)
114-
=> new MockInProcessDiagnoserExtraRunHandler();
115-
116-
public void DeserializeResults(BenchmarkCase benchmarkCase, string results) => Results.Add(benchmarkCase, results);
76+
public override string DiagnoserName => nameof(MockInProcessDiagnoserNoOverhead);
77+
public override RunMode DiagnoserRunMode => RunMode.NoOverhead;
78+
public override Type HandlerType => typeof(MockInProcessDiagnoserNoOverheadHandler);
79+
public override string ExpectedResult => "NoOverheadResult";
11780
}
11881

119-
public sealed class MockInProcessDiagnoserExtraRunHandler : IInProcessDiagnoserHandler
82+
public sealed class MockInProcessDiagnoserNoOverheadHandler : BaseMockInProcessDiagnoserHandler
12083
{
121-
public void Initialize(string? serializedConfig) { }
122-
123-
public void Handle(BenchmarkSignal signal, InProcessDiagnoserActionArgs args) { }
124-
125-
public string SerializeResults() => "ExtraRunResult";
84+
public MockInProcessDiagnoserNoOverheadHandler(string result) : base(result) { }
12685
}
12786

128-
public sealed class MockInProcessDiagnoserNone : IInProcessDiagnoser
87+
public sealed class MockInProcessDiagnoserExtraRun : BaseMockInProcessDiagnoser
12988
{
130-
public Dictionary<BenchmarkCase, string> Results { get; } = [];
131-
132-
public IEnumerable<string> Ids => [nameof(MockInProcessDiagnoserNone)];
133-
134-
public IEnumerable<IExporter> Exporters => [];
135-
136-
public IEnumerable<IAnalyser> Analysers => [];
137-
138-
public void DisplayResults(ILogger logger) => logger.WriteLine($"{nameof(MockInProcessDiagnoserNone)} results: [{string.Join(", ", Results.Values)}]");
139-
140-
public RunMode GetRunMode(BenchmarkCase benchmarkCase) => RunMode.None;
141-
142-
public void Handle(HostSignal signal, DiagnoserActionParameters parameters) { }
89+
public override string DiagnoserName => nameof(MockInProcessDiagnoserExtraRun);
90+
public override RunMode DiagnoserRunMode => RunMode.ExtraRun;
91+
public override Type HandlerType => typeof(MockInProcessDiagnoserExtraRunHandler);
92+
public override string ExpectedResult => "ExtraRunResult";
93+
}
14394

144-
public IEnumerable<Metric> ProcessResults(DiagnoserResults results) => [];
95+
public sealed class MockInProcessDiagnoserExtraRunHandler : BaseMockInProcessDiagnoserHandler
96+
{
97+
public MockInProcessDiagnoserExtraRunHandler(string result) : base(result) { }
98+
}
14599

146-
public IEnumerable<ValidationError> Validate(ValidationParameters validationParameters) => [];
100+
public sealed class MockInProcessDiagnoserNone : BaseMockInProcessDiagnoser
101+
{
102+
public override string DiagnoserName => nameof(MockInProcessDiagnoserNone);
103+
public override RunMode DiagnoserRunMode => RunMode.None;
104+
public override Type HandlerType => typeof(MockInProcessDiagnoserNoneHandler);
105+
public override string ExpectedResult => "NoneResult";
147106

148-
public (Type? handlerType, string? serializedConfig) GetSeparateProcessHandlerTypeAndSerializedConfig(BenchmarkCase benchmarkCase)
107+
public override (Type? handlerType, string? serializedConfig) GetSeparateProcessHandlerTypeAndSerializedConfig(BenchmarkCase benchmarkCase)
149108
=> default; // Returns default when RunMode is None
150109

151-
public IInProcessDiagnoserHandler? GetSameProcessHandler(BenchmarkCase benchmarkCase)
110+
public override IInProcessDiagnoserHandler? GetSameProcessHandler(BenchmarkCase benchmarkCase)
152111
=> null; // Returns null when RunMode is None
112+
}
153113

154-
public void DeserializeResults(BenchmarkCase benchmarkCase, string results) => Results.Add(benchmarkCase, results);
114+
public sealed class MockInProcessDiagnoserNoneHandler : BaseMockInProcessDiagnoserHandler
115+
{
116+
public MockInProcessDiagnoserNoneHandler(string result) : base(result) { }
155117
}

0 commit comments

Comments
 (0)