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