RSCG – ShadowWriterBuilder
| name | ShadowWriterBuilder |
| nuget | https://www.nuget.org/packages/ShadowWriter/ |
| link | https://github.com/StefanStolz/ShadowWriter |
| author | Stefan Stolz |
Generating null objects for testing
This is how you can use ShadowWriterBuilder .
The code that you start with is
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net9.0</TargetFramework>
</PropertyGroup>
<PropertyGroup>
<EmitCompilerGeneratedFiles>true</EmitCompilerGeneratedFiles>
<CompilerGeneratedFilesOutputPath>$(BaseIntermediateOutputPath)\GX</CompilerGeneratedFilesOutputPath>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="ShadowWriter" Version="0.9.5">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
</ItemGroup>
</Project>
The code that you will use is
using Builder;
var pOld = new Person("Andrei", "G", "Ignat");
var build = new Person.Builder();
build.FirstName = pOld.FirstName;
build.MiddleName = "";
build.LastName = (pOld.LastName) ;
var pNew = build.Build();
System.Console.WriteLine(pNew.FullName());
System.Console.WriteLine(pOld.FullName());
namespace Builder;
[ShadowWriter.Builder]
public partial record Person(string FirstName, string? MiddleName, string LastName)
{
public string FullName()
{
return FirstName + " " + MiddleName + " "+LastName;
}
}
The code that is generated is
// <auto-generated/>
using System;
using System.CodeDom.Compiler;
using System.Runtime.CompilerServices;
namespace ShadowWriter
{
[CompilerGenerated]
[GeneratedCode("ShadowWriter", "0.9.5.0")]
[System.AttributeUsage(AttributeTargets.Class)]
internal sealed class BuilderAttribute : System.Attribute
{
}
}
using System;
using System.Threading.Tasks;
using System.CodeDom.Compiler;
using System.Runtime.CompilerServices;
#nullable disable
namespace Builder;
[CompilerGenerated]
[GeneratedCode("ShadowWriter", "0.9.5.0")]
public partial record Person
{
public sealed class Builder
{
// Parameter: FirstName: string
public string FirstName { get; set; } = "";
// Parameter: MiddleName: string?
public string? MiddleName { get; set; } = "";
// Parameter: LastName: string
public string LastName { get; set; } = "";
public Person Build()
{
return new(this.FirstName, this.MiddleName, this.LastName );
}
}
}
Code and pdf at
https://ignatandrei.github.io/RSCG_Examples/v2/docs/ShadowWriterBuilder