Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 337d9ad

Browse files
authored
Merge pull request #8 from fgheysels/frgh/feat/testable_configuration
Add ModuleConfiguration factory method to easier test ModuleConfiguration implementations
2 parents e3a443c + 21705cb commit 337d9ad

File tree

3 files changed

+42
-6
lines changed

3 files changed

+42
-6
lines changed

src/Fg.IoTEdgeModule.Tests/Fg.IoTEdgeModule.Tests.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<TargetFramework>net6.0</TargetFramework>
55
<ImplicitUsings>enable</ImplicitUsings>
66
<Nullable>enable</Nullable>
7-
7+
<LangVersion>Preview</LangVersion>
88
<IsPackable>false</IsPackable>
99
</PropertyGroup>
1010

src/Fg.IoTEdgeModule.Tests/ModuleConfigurationTests.cs

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
using System.Security.Cryptography.X509Certificates;
21
using Fg.IoTEdgeModule.Configuration;
32
using Microsoft.Azure.Devices.Client;
43
using Microsoft.Azure.Devices.Shared;
@@ -11,7 +10,7 @@ public class ModuleConfigurationTests : IClassFixture<EnvironmentFixture>
1110
{
1211
public ModuleConfigurationTests(EnvironmentFixture environmentFixture)
1312
{
14-
13+
1514
}
1615

1716
[Fact]
@@ -25,18 +24,35 @@ var config
2524
Assert.NotNull(config);
2625
}
2726

27+
[Fact]
28+
public void CanInitializeConfiguration()
29+
{
30+
var desiredProperties = new TwinCollection("""{"SomeIntProperty":42, "SomeStringProperty": "stringvalue"}""");
31+
32+
var config = ModuleConfiguration.CreateFromTwin<TestModuleConfiguration>(desiredProperties, NullLogger.Instance);
33+
34+
Assert.Equal(42, config.SomeIntProperty);
35+
Assert.Equal("stringvalue", config.SomeStringProperty);
36+
}
37+
2838
private class TestModuleConfiguration : ModuleConfiguration
2939
{
30-
public TestModuleConfiguration(ILogger logger):base(logger){}
40+
public TestModuleConfiguration(ILogger logger) : base(logger) { }
41+
3142
protected override string ModuleName => "TestModule";
43+
44+
public int SomeIntProperty { get; private set; }
45+
public string SomeStringProperty { get; private set; }
46+
3247
protected override void InitializeFromTwin(TwinCollection desiredProperties)
3348
{
34-
int x = desiredProperties.Count;
49+
SomeIntProperty = desiredProperties["SomeIntProperty"];
50+
SomeStringProperty = desiredProperties["SomeStringProperty"];
3551
}
3652

3753
protected override void SetReportedProperties(TwinCollection reportedProperties)
3854
{
39-
55+
4056
}
4157
}
4258
}

src/Fg.IoTEdgeModule/Configuration/ModuleConfiguration.cs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,26 @@ public static async Task<TModuleConfiguration> CreateFromTwinAsync<TModuleConfig
4444
return config;
4545
}
4646

47+
/// <summary>
48+
/// Instantiate a <paramref name="TModuleConfiguration"/> instance and populate the configuration properties
49+
/// with values that are present in the <paramref name="desiredProperties"/> twin-collection.
50+
/// </summary>
51+
/// <remarks>Use this method for testing your <see cref="ModuleConfiguration"/> implementation.</remarks>
52+
public static TModuleConfiguration CreateFromTwin<TModuleConfiguration>(TwinCollection desiredProperties, ILogger logger) where TModuleConfiguration : ModuleConfiguration
53+
{
54+
var config =
55+
(TModuleConfiguration)Activator.CreateInstance(
56+
typeof(TModuleConfiguration),
57+
BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic,
58+
null,
59+
new object[] { logger },
60+
null);
61+
62+
config.InitializeFromTwin(desiredProperties);
63+
64+
return config;
65+
}
66+
4767
/// <summary>
4868
/// Reports the configuration settings via the Module Twin reported properties.
4969
/// </summary>

0 commit comments

Comments
 (0)