[{"data":1,"prerenderedAt":2823},["ShallowReactive",2],{"docs-navigation":3,"api-catalog":188,"api-nav-empty":286,"docs:\u002Fdocs\u002Fget-started\u002Frefactoring-a-test":287,"docs:\u002Fdocs\u002Fget-started\u002Frefactoring-a-test-surround":2820},[4],{"title":5,"path":6,"stem":7,"children":8,"page":32},"Docs","\u002Fdocs","docs",[9,33,63,85,99,137,154],{"title":10,"badge":11,"icon":12,"path":13,"stem":14,"children":15,"page":32},"Get started",null,"i-lucide-rocket","\u002Fdocs\u002Fget-started","docs\u002F1.get-started",[16,20,24,28],{"title":17,"path":18,"stem":19,"badge":11},"Introduction","\u002Fdocs\u002Fget-started\u002Fintroduction","docs\u002F1.get-started\u002F1.introduction",{"title":21,"path":22,"stem":23,"badge":11},"Installation","\u002Fdocs\u002Fget-started\u002Finstallation","docs\u002F1.get-started\u002F2.installation",{"title":25,"path":26,"stem":27,"badge":11},"Your first test","\u002Fdocs\u002Fget-started\u002Ffirst-test","docs\u002F1.get-started\u002F3.first-test",{"title":29,"path":30,"stem":31,"badge":11},"Refactoring a test","\u002Fdocs\u002Fget-started\u002Frefactoring-a-test","docs\u002F1.get-started\u002F4.refactoring-a-test",false,{"title":34,"badge":11,"icon":35,"path":36,"stem":37,"children":38,"page":32},"Fundamentals","i-lucide-layers","\u002Fdocs\u002Ffundamentals","docs\u002F2.fundamentals",[39,43,47,51,55,59],{"title":40,"path":41,"stem":42,"badge":11},"Fixture and Create","\u002Fdocs\u002Ffundamentals\u002Ffixture-and-create","docs\u002F2.fundamentals\u002F1.fixture-and-create",{"title":44,"path":45,"stem":46,"badge":11},"Build DSL","\u002Fdocs\u002Ffundamentals\u002Fbuild-dsl","docs\u002F2.fundamentals\u002F2.build-dsl",{"title":48,"path":49,"stem":50,"badge":11},"Customizations","\u002Fdocs\u002Ffundamentals\u002Fcustomizations","docs\u002F2.fundamentals\u002F3.customizations",{"title":52,"path":53,"stem":54,"badge":11},"Specimen graphs","\u002Fdocs\u002Ffundamentals\u002Fspecimen-graphs","docs\u002F2.fundamentals\u002F4.specimen-graphs",{"title":56,"path":57,"stem":58,"badge":11},"Behaviors","\u002Fdocs\u002Ffundamentals\u002Fbehaviors","docs\u002F2.fundamentals\u002F5.behaviors",{"title":60,"path":61,"stem":62,"badge":11},"Customizations catalog","\u002Fdocs\u002Ffundamentals\u002Fcustomizations-catalog","docs\u002F2.fundamentals\u002F6.customizations-catalog",{"title":64,"badge":11,"icon":65,"path":66,"stem":67,"children":68,"page":32},"How-to guides","i-lucide-book-open","\u002Fdocs\u002Fhow-to","docs\u002F3.how-to",[69,73,77,81],{"title":70,"path":71,"stem":72,"badge":11},"Collections","\u002Fdocs\u002Fhow-to\u002Fcollections","docs\u002F3.how-to\u002F1.collections",{"title":74,"path":75,"stem":76,"badge":11},"Circular references","\u002Fdocs\u002Fhow-to\u002Fcircular-refs","docs\u002F3.how-to\u002F2.circular-refs",{"title":78,"path":79,"stem":80,"badge":11},"Register, Freeze, and Inject","\u002Fdocs\u002Fhow-to\u002Fregister-freeze-inject","docs\u002F3.how-to\u002F3.register-freeze-inject",{"title":82,"path":83,"stem":84,"badge":11},"Data annotations","\u002Fdocs\u002Fhow-to\u002Fdata-annotations","docs\u002F3.how-to\u002F4.data-annotations",{"title":86,"badge":11,"icon":87,"path":88,"stem":89,"children":90,"page":32},"Extensions","i-lucide-puzzle","\u002Fdocs\u002Fextensions","docs\u002F4.extensions",[91,95],{"title":92,"path":93,"stem":94,"badge":11},"Idioms","\u002Fdocs\u002Fextensions\u002Fidioms","docs\u002F4.extensions\u002F1.idioms",{"title":96,"path":97,"stem":98,"badge":11},"Seed extensions","\u002Fdocs\u002Fextensions\u002Fseed-extensions","docs\u002F4.extensions\u002F2.seed-extensions",{"title":100,"badge":11,"icon":101,"path":102,"stem":103,"children":104,"page":32},"Integrations","i-lucide-plug","\u002Fdocs\u002Fintegrations","docs\u002F5.integrations",[105,109,113,117,121,125,129],{"title":106,"path":107,"stem":108,"badge":11},"Overview","\u002Fdocs\u002Fintegrations\u002Foverview","docs\u002F5.integrations\u002F00.overview",{"title":110,"path":111,"stem":112,"badge":11},"xUnit.net 3","\u002Fdocs\u002Fintegrations\u002Fxunit3","docs\u002F5.integrations\u002F01.xunit3",{"title":114,"path":115,"stem":116,"badge":11},"AutoMoq","\u002Fdocs\u002Fintegrations\u002Fautomoq","docs\u002F5.integrations\u002F02.automoq",{"title":118,"path":119,"stem":120,"badge":11},"NUnit 4","\u002Fdocs\u002Fintegrations\u002Fnunit4","docs\u002F5.integrations\u002F04.nunit4",{"title":122,"path":123,"stem":124,"badge":11},"AutoNSubstitute","\u002Fdocs\u002Fintegrations\u002Fautonsubstitute","docs\u002F5.integrations\u002F06.autonsubstitute",{"title":126,"path":127,"stem":128,"badge":11},"AutoFakeItEasy","\u002Fdocs\u002Fintegrations\u002Fautofakeiteasy","docs\u002F5.integrations\u002F09.autofakeiteasy",{"title":130,"path":131,"stem":132,"badge":133},"TUnit","\u002Fdocs\u002Fintegrations\u002Ftunit","docs\u002F5.integrations\u002F10.tunit",{"label":134,"color":135,"variant":136},"Preview","warning","subtle",{"title":138,"badge":11,"icon":139,"path":140,"stem":141,"children":142,"page":32},"Advanced","i-lucide-cog","\u002Fdocs\u002Fadvanced","docs\u002F6.advanced",[143,146,150],{"title":106,"path":144,"stem":145,"badge":11},"\u002Fdocs\u002Fadvanced\u002Foverview","docs\u002F6.advanced\u002F0.overview",{"title":147,"path":148,"stem":149,"badge":11},"Specimen pipeline","\u002Fdocs\u002Fadvanced\u002Fspecimen-pipeline","docs\u002F6.advanced\u002F1.specimen-pipeline",{"title":151,"path":152,"stem":153,"badge":11},"Specimen builders and specifications","\u002Fdocs\u002Fadvanced\u002Fspecimen-builders-and-specifications","docs\u002F6.advanced\u002F2.specimen-builders-and-specifications",{"title":155,"badge":11,"icon":156,"path":157,"stem":158,"children":159,"page":32},"Reference","i-lucide-library","\u002Fdocs\u002Freference","docs\u002F7.reference",[160,164,168,172,176,180,184],{"title":161,"path":162,"stem":163,"badge":11},"NuGet packages","\u002Fdocs\u002Freference\u002Fpackages","docs\u002F7.reference\u002F1.packages",{"title":165,"path":166,"stem":167,"badge":11},"API reference","\u002Fdocs\u002Freference\u002Fapi-reference","docs\u002F7.reference\u002F2.api-reference",{"title":169,"path":170,"stem":171,"badge":11},"Cheat sheet","\u002Fdocs\u002Freference\u002Fcheat-sheet","docs\u002F7.reference\u002F3.cheat-sheet",{"title":173,"path":174,"stem":175,"badge":11},"FAQ","\u002Fdocs\u002Freference\u002Ffaq","docs\u002F7.reference\u002F4.faq",{"title":177,"path":178,"stem":179,"badge":11},"Compatibility","\u002Fdocs\u002Freference\u002Fcompatibility","docs\u002F7.reference\u002F5.compatibility",{"title":181,"path":182,"stem":183,"badge":11},"v4 to v5 migration","\u002Fdocs\u002Freference\u002Fv4-to-v5-migration","docs\u002F7.reference\u002F6.v4-to-v5-migration",{"title":185,"path":186,"stem":187,"badge":11},"Previous versions","\u002Fdocs\u002Freference\u002Fprevious-versions","docs\u002F7.reference\u002F7.previous-versions",{"defaultPath":189,"packages":190},"\u002Fapi\u002Fautofixture\u002F5-0-0-rc-1",[191,204,210,215,221,227,232,238,243,248,253,258,264,271,276,281],{"id":192,"name":193,"nugetId":193,"primary":194,"versions":195,"defaultVersion":197,"defaultVersionSegment":198},"autofixture","AutoFixture",true,[196,200],{"version":197,"versionSegment":198,"line":199,"isLatest":194},"5.0.0-rc.1","5-0-0-rc-1","v5",{"version":201,"versionSegment":202,"line":203,"isLatest":32},"4.18.1","4-18-1","v4",{"id":205,"name":206,"nugetId":206,"primary":32,"versions":207,"defaultVersion":197,"defaultVersionSegment":198},"autofakeiteasy","AutoFixture.AutoFakeItEasy",[208,209],{"version":197,"versionSegment":198,"line":199,"isLatest":194},{"version":201,"versionSegment":202,"line":203,"isLatest":32},{"id":211,"name":212,"nugetId":212,"primary":32,"versions":213,"defaultVersion":201,"defaultVersionSegment":202},"autofoq","AutoFixture.AutoFoq",[214],{"version":201,"versionSegment":202,"line":203,"isLatest":194},{"id":216,"name":217,"nugetId":217,"primary":32,"versions":218,"defaultVersion":197,"defaultVersionSegment":198},"automoq","AutoFixture.AutoMoq",[219,220],{"version":197,"versionSegment":198,"line":199,"isLatest":194},{"version":201,"versionSegment":202,"line":203,"isLatest":32},{"id":222,"name":223,"nugetId":223,"primary":32,"versions":224,"defaultVersion":197,"defaultVersionSegment":198},"autonsubstitute","AutoFixture.AutoNSubstitute",[225,226],{"version":197,"versionSegment":198,"line":199,"isLatest":194},{"version":201,"versionSegment":202,"line":203,"isLatest":32},{"id":228,"name":229,"nugetId":229,"primary":32,"versions":230,"defaultVersion":201,"defaultVersionSegment":202},"autorhinomocks","AutoFixture.AutoRhinoMocks",[231],{"version":201,"versionSegment":202,"line":203,"isLatest":194},{"id":233,"name":234,"nugetId":234,"primary":32,"versions":235,"defaultVersion":197,"defaultVersionSegment":198},"idioms","AutoFixture.Idioms",[236,237],{"version":197,"versionSegment":198,"line":199,"isLatest":194},{"version":201,"versionSegment":202,"line":203,"isLatest":32},{"id":239,"name":240,"nugetId":240,"primary":32,"versions":241,"defaultVersion":201,"defaultVersionSegment":202},"idioms-fscheck","AutoFixture.Idioms.FsCheck",[242],{"version":201,"versionSegment":202,"line":203,"isLatest":194},{"id":244,"name":245,"nugetId":245,"primary":32,"versions":246,"defaultVersion":201,"defaultVersionSegment":202},"nunit2","AutoFixture.NUnit2",[247],{"version":201,"versionSegment":202,"line":203,"isLatest":194},{"id":249,"name":250,"nugetId":250,"primary":32,"versions":251,"defaultVersion":201,"defaultVersionSegment":202},"nunit3","AutoFixture.NUnit3",[252],{"version":201,"versionSegment":202,"line":203,"isLatest":194},{"id":254,"name":255,"nugetId":255,"primary":32,"versions":256,"defaultVersion":197,"defaultVersionSegment":198},"nunit4","AutoFixture.NUnit4",[257],{"version":197,"versionSegment":198,"line":199,"isLatest":194},{"id":259,"name":260,"nugetId":260,"primary":32,"versions":261,"defaultVersion":197,"defaultVersionSegment":198},"seedextensions","AutoFixture.SeedExtensions",[262,263],{"version":197,"versionSegment":198,"line":199,"isLatest":194},{"version":201,"versionSegment":202,"line":203,"isLatest":32},{"id":265,"name":266,"nugetId":266,"primary":32,"versions":267,"defaultVersion":269,"defaultVersionSegment":270},"tunit","AutoFixture.TUnit",[268],{"version":269,"versionSegment":270,"line":203,"isLatest":194},"0.1.0-preview0001","0-1-0-preview0001",{"id":272,"name":273,"nugetId":273,"primary":32,"versions":274,"defaultVersion":201,"defaultVersionSegment":202},"xunit","AutoFixture.xUnit",[275],{"version":201,"versionSegment":202,"line":203,"isLatest":194},{"id":277,"name":278,"nugetId":278,"primary":32,"versions":279,"defaultVersion":201,"defaultVersionSegment":202},"xunit2","AutoFixture.xUnit2",[280],{"version":201,"versionSegment":202,"line":203,"isLatest":194},{"id":282,"name":283,"nugetId":283,"primary":32,"versions":284,"defaultVersion":197,"defaultVersionSegment":198},"xunit3","AutoFixture.Xunit3",[285],{"version":197,"versionSegment":198,"line":199,"isLatest":194},[],{"id":288,"title":29,"badge":11,"body":289,"description":2815,"extension":2816,"meta":2817,"navigation":194,"path":30,"seo":2818,"stem":31,"updated":11,"__hash__":2819},"docs\u002Fdocs\u002F1.get-started\u002F4.refactoring-a-test.md",{"type":290,"value":291,"toc":2805},"minimark",[292,296,301,324,328,336,339,343,346,832,835,1166,1174,1178,1181,1746,1749,1779,1783,1795,1808,2045,2056,2062,2072,2076,2083,2658,2672,2676,2705,2709,2764,2774,2778,2801],[293,294,295],"p",{},"Real service tests often need a system under test (SUT) with injected dependencies and a valid domain object before the service accepts the call. This page starts with a hand-written example, then refactors it in two steps.",[297,298,300],"h2",{"id":299},"prerequisites","Prerequisites",[302,303,304,308,314],"ul",{},[305,306,307],"li",{},".NET 8+ test project",[305,309,310,313],{},[311,312,193],"a",{"href":22}," in your test project",[305,315,316,318,319,323],{},[311,317,217],{"href":115}," plus an explicit ",[320,321,322],"strong",{},"Moq"," reference — AutoMoq's own Moq dependency is kept low for compatibility, so add the latest Moq yourself for current features and fixes",[297,325,327],{"id":326},"example-scenario","Example scenario",[293,329,330,331,335],{},"You are testing ",[332,333,334],"code",{},"ShippingLabelService.CreateLabel",". The service loads an order from a repository, validates the order is shippable, asks a rate calculator for total weight, and returns a multi-line label.",[293,337,338],{},"The test should verify the label includes the customer's name, destination country, and total weight in kilograms. You do not care about product price, billing zip codes, or most address fields — but the service still requires them to be populated.",[297,340,342],{"id":341},"example-types","Example types",[293,344,345],{},"The service and its dependencies:",[347,348,353],"pre",{"className":349,"code":350,"language":351,"meta":352,"style":352},"language-csharp shiki shiki-themes light-plus light-plus dark-plus","public interface ICommerceOrderRepository\n{\n    Order? GetById(uint id);\n}\n\npublic interface IShippingRateCalculator\n{\n    double CalculateTotalWeightKg(Order order);\n}\n\npublic class ShippingRateCalculator : IShippingRateCalculator\n{\n    public double CalculateTotalWeightKg(Order order) =>\n        order.OrderLines.Sum(line => line.Product.Weight * line.Quantity);\n}\n\npublic class ShippingLabelService(\n    ICommerceOrderRepository orders,\n    IShippingRateCalculator rateCalculator)\n{\n    public string CreateLabel(uint orderId)\n    {\n        var order = orders.GetById(orderId)\n            ?? throw new InvalidOperationException(\"Order not found.\");\n\n        \u002F\u002F Validates line items, shipping address, billing address, then:\n        var weightKg = rateCalculator.CalculateTotalWeightKg(order);\n        var address = order.ShippingAddress;\n        return $\"{address.Name}\\n{address.Street}\\n{address.Zip} {address.Country}\\nWeight: {weightKg:F1} kg\";\n    }\n}\n","csharp","",[332,354,355,371,378,404,410,416,426,431,450,455,460,477,482,502,550,555,560,573,585,597,602,622,628,653,677,682,689,714,734,821,827],{"__ignoreMap":352},[356,357,360,364,367],"span",{"class":358,"line":359},"line",1,[356,361,363],{"class":362},"stxUP","public",[356,365,366],{"class":362}," interface",[356,368,370],{"class":369},"sopvc"," ICommerceOrderRepository\n",[356,372,374],{"class":358,"line":373},2,[356,375,377],{"class":376},"s_Yst","{\n",[356,379,381,384,387,391,394,397,401],{"class":358,"line":380},3,[356,382,383],{"class":369},"    Order",[356,385,386],{"class":376},"? ",[356,388,390],{"class":389},"swoLU","GetById",[356,392,393],{"class":376},"(",[356,395,396],{"class":362},"uint",[356,398,400],{"class":399},"sswaR"," id",[356,402,403],{"class":376},");\n",[356,405,407],{"class":358,"line":406},4,[356,408,409],{"class":376},"}\n",[356,411,413],{"class":358,"line":412},5,[356,414,415],{"emptyLinePlaceholder":194},"\n",[356,417,419,421,423],{"class":358,"line":418},6,[356,420,363],{"class":362},[356,422,366],{"class":362},[356,424,425],{"class":369}," IShippingRateCalculator\n",[356,427,429],{"class":358,"line":428},7,[356,430,377],{"class":376},[356,432,434,437,440,442,445,448],{"class":358,"line":433},8,[356,435,436],{"class":362},"    double",[356,438,439],{"class":389}," CalculateTotalWeightKg",[356,441,393],{"class":376},[356,443,444],{"class":369},"Order",[356,446,447],{"class":399}," order",[356,449,403],{"class":376},[356,451,453],{"class":358,"line":452},9,[356,454,409],{"class":376},[356,456,458],{"class":358,"line":457},10,[356,459,415],{"emptyLinePlaceholder":194},[356,461,463,465,468,471,474],{"class":358,"line":462},11,[356,464,363],{"class":362},[356,466,467],{"class":362}," class",[356,469,470],{"class":369}," ShippingRateCalculator",[356,472,473],{"class":376}," : ",[356,475,476],{"class":369},"IShippingRateCalculator\n",[356,478,480],{"class":358,"line":479},12,[356,481,377],{"class":376},[356,483,485,488,491,493,495,497,499],{"class":358,"line":484},13,[356,486,487],{"class":362},"    public",[356,489,490],{"class":362}," double",[356,492,439],{"class":389},[356,494,393],{"class":376},[356,496,444],{"class":369},[356,498,447],{"class":399},[356,500,501],{"class":376},") =>\n",[356,503,505,508,511,514,516,519,521,523,526,528,530,533,535,538,541,543,545,548],{"class":358,"line":504},14,[356,506,507],{"class":399},"        order",[356,509,510],{"class":376},".",[356,512,513],{"class":399},"OrderLines",[356,515,510],{"class":376},[356,517,518],{"class":389},"Sum",[356,520,393],{"class":376},[356,522,358],{"class":399},[356,524,525],{"class":376}," => ",[356,527,358],{"class":399},[356,529,510],{"class":376},[356,531,532],{"class":399},"Product",[356,534,510],{"class":376},[356,536,537],{"class":399},"Weight",[356,539,540],{"class":376}," * ",[356,542,358],{"class":399},[356,544,510],{"class":376},[356,546,547],{"class":399},"Quantity",[356,549,403],{"class":376},[356,551,553],{"class":358,"line":552},15,[356,554,409],{"class":376},[356,556,558],{"class":358,"line":557},16,[356,559,415],{"emptyLinePlaceholder":194},[356,561,563,565,567,570],{"class":358,"line":562},17,[356,564,363],{"class":362},[356,566,467],{"class":362},[356,568,569],{"class":369}," ShippingLabelService",[356,571,572],{"class":376},"(\n",[356,574,576,579,582],{"class":358,"line":575},18,[356,577,578],{"class":369},"    ICommerceOrderRepository",[356,580,581],{"class":399}," orders",[356,583,584],{"class":376},",\n",[356,586,588,591,594],{"class":358,"line":587},19,[356,589,590],{"class":369},"    IShippingRateCalculator",[356,592,593],{"class":399}," rateCalculator",[356,595,596],{"class":376},")\n",[356,598,600],{"class":358,"line":599},20,[356,601,377],{"class":376},[356,603,605,607,610,613,615,617,620],{"class":358,"line":604},21,[356,606,487],{"class":362},[356,608,609],{"class":362}," string",[356,611,612],{"class":389}," CreateLabel",[356,614,393],{"class":376},[356,616,396],{"class":362},[356,618,619],{"class":399}," orderId",[356,621,596],{"class":376},[356,623,625],{"class":358,"line":624},22,[356,626,627],{"class":376},"    {\n",[356,629,631,634,636,639,642,644,646,648,651],{"class":358,"line":630},23,[356,632,633],{"class":362},"        var",[356,635,447],{"class":399},[356,637,638],{"class":376}," = ",[356,640,641],{"class":399},"orders",[356,643,510],{"class":376},[356,645,390],{"class":389},[356,647,393],{"class":376},[356,649,650],{"class":399},"orderId",[356,652,596],{"class":376},[356,654,656,659,663,666,669,671,675],{"class":358,"line":655},24,[356,657,658],{"class":376},"            ?? ",[356,660,662],{"class":661},"smUd-","throw",[356,664,665],{"class":362}," new",[356,667,668],{"class":369}," InvalidOperationException",[356,670,393],{"class":376},[356,672,674],{"class":673},"sFD8J","\"Order not found.\"",[356,676,403],{"class":376},[356,678,680],{"class":358,"line":679},25,[356,681,415],{"emptyLinePlaceholder":194},[356,683,685],{"class":358,"line":684},26,[356,686,688],{"class":687},"sYH5r","        \u002F\u002F Validates line items, shipping address, billing address, then:\n",[356,690,692,694,697,699,702,704,707,709,712],{"class":358,"line":691},27,[356,693,633],{"class":362},[356,695,696],{"class":399}," weightKg",[356,698,638],{"class":376},[356,700,701],{"class":399},"rateCalculator",[356,703,510],{"class":376},[356,705,706],{"class":389},"CalculateTotalWeightKg",[356,708,393],{"class":376},[356,710,711],{"class":399},"order",[356,713,403],{"class":376},[356,715,717,719,722,724,726,728,731],{"class":358,"line":716},28,[356,718,633],{"class":362},[356,720,721],{"class":399}," address",[356,723,638],{"class":376},[356,725,711],{"class":399},[356,727,510],{"class":376},[356,729,730],{"class":399},"ShippingAddress",[356,732,733],{"class":376},";\n",[356,735,737,740,743,747,750,752,755,758,762,764,766,768,771,773,775,777,779,781,784,786,789,791,793,796,798,800,803,805,808,811,814,816,819],{"class":358,"line":736},29,[356,738,739],{"class":661},"        return",[356,741,742],{"class":673}," $\"",[356,744,746],{"class":745},"sw10w","{",[356,748,749],{"class":399},"address",[356,751,510],{"class":745},[356,753,754],{"class":399},"Name",[356,756,757],{"class":745},"}",[356,759,761],{"class":760},"sbve-","\\n",[356,763,746],{"class":745},[356,765,749],{"class":399},[356,767,510],{"class":745},[356,769,770],{"class":399},"Street",[356,772,757],{"class":745},[356,774,761],{"class":760},[356,776,746],{"class":745},[356,778,749],{"class":399},[356,780,510],{"class":745},[356,782,783],{"class":399},"Zip",[356,785,757],{"class":745},[356,787,788],{"class":745}," {",[356,790,749],{"class":399},[356,792,510],{"class":745},[356,794,795],{"class":399},"Country",[356,797,757],{"class":745},[356,799,761],{"class":760},[356,801,802],{"class":673},"Weight: ",[356,804,746],{"class":745},[356,806,807],{"class":399},"weightKg",[356,809,810],{"class":376},":",[356,812,813],{"class":399},"F1",[356,815,757],{"class":745},[356,817,818],{"class":673}," kg\"",[356,820,733],{"class":376},[356,822,824],{"class":358,"line":823},30,[356,825,826],{"class":376},"    }\n",[356,828,830],{"class":358,"line":829},31,[356,831,409],{"class":376},[293,833,834],{},"The order graph the service validates:",[347,836,838],{"className":349,"code":837,"language":351,"meta":352,"style":352},"public class Order\n{\n    public Order(uint id)\n    {\n        Id = id;\n        OrderLines = new List\u003COrderLine>();\n    }\n\n    public uint Id { get; private set; }\n\n    public IList\u003COrderLine> OrderLines { get; private set; }\n\n    public ShippingAddress ShippingAddress { get; set; } = new();\n\n    public ShippingAddress BillingAddress { get; set; } = new();\n}\n\npublic class ShippingAddress\n{\n    public string Name { get; set; } = string.Empty;\n    public string Street { get; set; } = string.Empty;\n    public string Zip { get; set; } = string.Empty;\n    public string Country { get; set; } = string.Empty;\n}\n",[332,839,840,849,853,868,872,884,906,910,914,942,946,974,978,1004,1008,1031,1035,1039,1048,1052,1081,1108,1135,1162],{"__ignoreMap":352},[356,841,842,844,846],{"class":358,"line":359},[356,843,363],{"class":362},[356,845,467],{"class":362},[356,847,848],{"class":369}," Order\n",[356,850,851],{"class":358,"line":373},[356,852,377],{"class":376},[356,854,855,857,860,862,864,866],{"class":358,"line":380},[356,856,487],{"class":362},[356,858,859],{"class":389}," Order",[356,861,393],{"class":376},[356,863,396],{"class":362},[356,865,400],{"class":399},[356,867,596],{"class":376},[356,869,870],{"class":358,"line":406},[356,871,627],{"class":376},[356,873,874,877,879,882],{"class":358,"line":412},[356,875,876],{"class":399},"        Id",[356,878,638],{"class":376},[356,880,881],{"class":399},"id",[356,883,733],{"class":376},[356,885,886,889,891,894,897,900,903],{"class":358,"line":418},[356,887,888],{"class":399},"        OrderLines",[356,890,638],{"class":376},[356,892,893],{"class":362},"new",[356,895,896],{"class":369}," List",[356,898,899],{"class":376},"\u003C",[356,901,902],{"class":369},"OrderLine",[356,904,905],{"class":376},">();\n",[356,907,908],{"class":358,"line":428},[356,909,826],{"class":376},[356,911,912],{"class":358,"line":433},[356,913,415],{"emptyLinePlaceholder":194},[356,915,916,918,921,924,927,930,933,936,939],{"class":358,"line":452},[356,917,487],{"class":362},[356,919,920],{"class":362}," uint",[356,922,923],{"class":399}," Id",[356,925,926],{"class":376}," { ",[356,928,929],{"class":362},"get",[356,931,932],{"class":376},"; ",[356,934,935],{"class":362},"private",[356,937,938],{"class":362}," set",[356,940,941],{"class":376},"; }\n",[356,943,944],{"class":358,"line":457},[356,945,415],{"emptyLinePlaceholder":194},[356,947,948,950,953,955,957,960,962,964,966,968,970,972],{"class":358,"line":462},[356,949,487],{"class":362},[356,951,952],{"class":369}," IList",[356,954,899],{"class":376},[356,956,902],{"class":369},[356,958,959],{"class":376},"> ",[356,961,513],{"class":399},[356,963,926],{"class":376},[356,965,929],{"class":362},[356,967,932],{"class":376},[356,969,935],{"class":362},[356,971,938],{"class":362},[356,973,941],{"class":376},[356,975,976],{"class":358,"line":479},[356,977,415],{"emptyLinePlaceholder":194},[356,979,980,982,985,987,989,991,993,996,999,1001],{"class":358,"line":484},[356,981,487],{"class":362},[356,983,984],{"class":369}," ShippingAddress",[356,986,984],{"class":399},[356,988,926],{"class":376},[356,990,929],{"class":362},[356,992,932],{"class":376},[356,994,995],{"class":362},"set",[356,997,998],{"class":376},"; } = ",[356,1000,893],{"class":362},[356,1002,1003],{"class":376},"();\n",[356,1005,1006],{"class":358,"line":504},[356,1007,415],{"emptyLinePlaceholder":194},[356,1009,1010,1012,1014,1017,1019,1021,1023,1025,1027,1029],{"class":358,"line":552},[356,1011,487],{"class":362},[356,1013,984],{"class":369},[356,1015,1016],{"class":399}," BillingAddress",[356,1018,926],{"class":376},[356,1020,929],{"class":362},[356,1022,932],{"class":376},[356,1024,995],{"class":362},[356,1026,998],{"class":376},[356,1028,893],{"class":362},[356,1030,1003],{"class":376},[356,1032,1033],{"class":358,"line":557},[356,1034,409],{"class":376},[356,1036,1037],{"class":358,"line":562},[356,1038,415],{"emptyLinePlaceholder":194},[356,1040,1041,1043,1045],{"class":358,"line":575},[356,1042,363],{"class":362},[356,1044,467],{"class":362},[356,1046,1047],{"class":369}," ShippingAddress\n",[356,1049,1050],{"class":358,"line":587},[356,1051,377],{"class":376},[356,1053,1054,1056,1058,1061,1063,1065,1067,1069,1071,1074,1076,1079],{"class":358,"line":599},[356,1055,487],{"class":362},[356,1057,609],{"class":362},[356,1059,1060],{"class":399}," Name",[356,1062,926],{"class":376},[356,1064,929],{"class":362},[356,1066,932],{"class":376},[356,1068,995],{"class":362},[356,1070,998],{"class":376},[356,1072,1073],{"class":362},"string",[356,1075,510],{"class":376},[356,1077,1078],{"class":399},"Empty",[356,1080,733],{"class":376},[356,1082,1083,1085,1087,1090,1092,1094,1096,1098,1100,1102,1104,1106],{"class":358,"line":604},[356,1084,487],{"class":362},[356,1086,609],{"class":362},[356,1088,1089],{"class":399}," Street",[356,1091,926],{"class":376},[356,1093,929],{"class":362},[356,1095,932],{"class":376},[356,1097,995],{"class":362},[356,1099,998],{"class":376},[356,1101,1073],{"class":362},[356,1103,510],{"class":376},[356,1105,1078],{"class":399},[356,1107,733],{"class":376},[356,1109,1110,1112,1114,1117,1119,1121,1123,1125,1127,1129,1131,1133],{"class":358,"line":624},[356,1111,487],{"class":362},[356,1113,609],{"class":362},[356,1115,1116],{"class":399}," Zip",[356,1118,926],{"class":376},[356,1120,929],{"class":362},[356,1122,932],{"class":376},[356,1124,995],{"class":362},[356,1126,998],{"class":376},[356,1128,1073],{"class":362},[356,1130,510],{"class":376},[356,1132,1078],{"class":399},[356,1134,733],{"class":376},[356,1136,1137,1139,1141,1144,1146,1148,1150,1152,1154,1156,1158,1160],{"class":358,"line":630},[356,1138,487],{"class":362},[356,1140,609],{"class":362},[356,1142,1143],{"class":399}," Country",[356,1145,926],{"class":376},[356,1147,929],{"class":362},[356,1149,932],{"class":376},[356,1151,995],{"class":362},[356,1153,998],{"class":376},[356,1155,1073],{"class":362},[356,1157,510],{"class":376},[356,1159,1078],{"class":399},[356,1161,733],{"class":376},[356,1163,1164],{"class":358,"line":655},[356,1165,409],{"class":376},[293,1167,1168,1170,1171,1173],{},[332,1169,902],{}," and ",[332,1172,532],{}," are also part of the commerce model. The test pins product weight and line quantity because the weight assert depends on them; other product fields stay anonymous.",[297,1175,1177],{"id":1176},"the-classic-approach","The classic approach",[293,1179,1180],{},"A typical hand-written test wires the full graph and constructs the service manually:",[347,1182,1184],{"className":349,"code":1183,"language":351,"meta":352,"style":352},"const uint orderId = 1001;\n\nvar product = new Product(501)\n{\n    Price = 24.99m,\n    Weight = 1.25\n};\nvar line = new OrderLine(product) { Quantity = 2 };\n\nvar order = new Order(orderId);\norder.ShippingAddress = new ShippingAddress\n{\n    Name = \"Jane Doe\",\n    Street = \"742 Evergreen Terrace\",\n    Zip = \"12345\",\n    Country = \"Denmark\"\n};\norder.BillingAddress = new ShippingAddress\n{\n    Name = \"Jane Doe\",\n    Street = \"742 Evergreen Terrace\",\n    Zip = \"12345\",\n    Country = \"Denmark\"\n};\norder.OrderLines.Add(line);\n\nvar orderRepository = new Mock\u003CICommerceOrderRepository>();\norderRepository\n    .Setup(r => r.GetById(orderId))\n    .Returns(order);\n\nvar rateCalculator = new Mock\u003CIShippingRateCalculator>();\nrateCalculator\n    .Setup(c => c.CalculateTotalWeightKg(order))\n    .Returns(2.5);\n\nvar sut = new ShippingLabelService(\n    orderRepository.Object,\n    rateCalculator.Object);\n\nvar label = sut.CreateLabel(orderId);\n\nAssert.Contains(\"Jane Doe\", label);\nAssert.Contains(\"Denmark\", label);\nAssert.Contains(\"2.5\", label);\n",[332,1185,1186,1203,1207,1229,1233,1245,1255,1260,1292,1296,1314,1328,1332,1344,1356,1368,1378,1382,1397,1401,1411,1421,1431,1439,1443,1462,1466,1487,1492,1520,1533,1537,1557,1563,1589,1603,1608,1624,1637,1649,1654,1678,1683,1706,1726],{"__ignoreMap":352},[356,1187,1188,1191,1193,1195,1197,1201],{"class":358,"line":359},[356,1189,1190],{"class":362},"const",[356,1192,920],{"class":362},[356,1194,619],{"class":399},[356,1196,638],{"class":376},[356,1198,1200],{"class":1199},"s-S-M","1001",[356,1202,733],{"class":376},[356,1204,1205],{"class":358,"line":373},[356,1206,415],{"emptyLinePlaceholder":194},[356,1208,1209,1212,1215,1217,1219,1222,1224,1227],{"class":358,"line":380},[356,1210,1211],{"class":362},"var",[356,1213,1214],{"class":399}," product",[356,1216,638],{"class":376},[356,1218,893],{"class":362},[356,1220,1221],{"class":369}," Product",[356,1223,393],{"class":376},[356,1225,1226],{"class":1199},"501",[356,1228,596],{"class":376},[356,1230,1231],{"class":358,"line":406},[356,1232,377],{"class":376},[356,1234,1235,1238,1240,1243],{"class":358,"line":412},[356,1236,1237],{"class":399},"    Price",[356,1239,638],{"class":376},[356,1241,1242],{"class":1199},"24.99m",[356,1244,584],{"class":376},[356,1246,1247,1250,1252],{"class":358,"line":418},[356,1248,1249],{"class":399},"    Weight",[356,1251,638],{"class":376},[356,1253,1254],{"class":1199},"1.25\n",[356,1256,1257],{"class":358,"line":428},[356,1258,1259],{"class":376},"};\n",[356,1261,1262,1264,1267,1269,1271,1274,1276,1279,1282,1284,1286,1289],{"class":358,"line":433},[356,1263,1211],{"class":362},[356,1265,1266],{"class":399}," line",[356,1268,638],{"class":376},[356,1270,893],{"class":362},[356,1272,1273],{"class":369}," OrderLine",[356,1275,393],{"class":376},[356,1277,1278],{"class":399},"product",[356,1280,1281],{"class":376},") { ",[356,1283,547],{"class":399},[356,1285,638],{"class":376},[356,1287,1288],{"class":1199},"2",[356,1290,1291],{"class":376}," };\n",[356,1293,1294],{"class":358,"line":452},[356,1295,415],{"emptyLinePlaceholder":194},[356,1297,1298,1300,1302,1304,1306,1308,1310,1312],{"class":358,"line":457},[356,1299,1211],{"class":362},[356,1301,447],{"class":399},[356,1303,638],{"class":376},[356,1305,893],{"class":362},[356,1307,859],{"class":369},[356,1309,393],{"class":376},[356,1311,650],{"class":399},[356,1313,403],{"class":376},[356,1315,1316,1318,1320,1322,1324,1326],{"class":358,"line":462},[356,1317,711],{"class":399},[356,1319,510],{"class":376},[356,1321,730],{"class":399},[356,1323,638],{"class":376},[356,1325,893],{"class":362},[356,1327,1047],{"class":369},[356,1329,1330],{"class":358,"line":479},[356,1331,377],{"class":376},[356,1333,1334,1337,1339,1342],{"class":358,"line":484},[356,1335,1336],{"class":399},"    Name",[356,1338,638],{"class":376},[356,1340,1341],{"class":673},"\"Jane Doe\"",[356,1343,584],{"class":376},[356,1345,1346,1349,1351,1354],{"class":358,"line":504},[356,1347,1348],{"class":399},"    Street",[356,1350,638],{"class":376},[356,1352,1353],{"class":673},"\"742 Evergreen Terrace\"",[356,1355,584],{"class":376},[356,1357,1358,1361,1363,1366],{"class":358,"line":552},[356,1359,1360],{"class":399},"    Zip",[356,1362,638],{"class":376},[356,1364,1365],{"class":673},"\"12345\"",[356,1367,584],{"class":376},[356,1369,1370,1373,1375],{"class":358,"line":557},[356,1371,1372],{"class":399},"    Country",[356,1374,638],{"class":376},[356,1376,1377],{"class":673},"\"Denmark\"\n",[356,1379,1380],{"class":358,"line":562},[356,1381,1259],{"class":376},[356,1383,1384,1386,1388,1391,1393,1395],{"class":358,"line":575},[356,1385,711],{"class":399},[356,1387,510],{"class":376},[356,1389,1390],{"class":399},"BillingAddress",[356,1392,638],{"class":376},[356,1394,893],{"class":362},[356,1396,1047],{"class":369},[356,1398,1399],{"class":358,"line":587},[356,1400,377],{"class":376},[356,1402,1403,1405,1407,1409],{"class":358,"line":599},[356,1404,1336],{"class":399},[356,1406,638],{"class":376},[356,1408,1341],{"class":673},[356,1410,584],{"class":376},[356,1412,1413,1415,1417,1419],{"class":358,"line":604},[356,1414,1348],{"class":399},[356,1416,638],{"class":376},[356,1418,1353],{"class":673},[356,1420,584],{"class":376},[356,1422,1423,1425,1427,1429],{"class":358,"line":624},[356,1424,1360],{"class":399},[356,1426,638],{"class":376},[356,1428,1365],{"class":673},[356,1430,584],{"class":376},[356,1432,1433,1435,1437],{"class":358,"line":630},[356,1434,1372],{"class":399},[356,1436,638],{"class":376},[356,1438,1377],{"class":673},[356,1440,1441],{"class":358,"line":655},[356,1442,1259],{"class":376},[356,1444,1445,1447,1449,1451,1453,1456,1458,1460],{"class":358,"line":679},[356,1446,711],{"class":399},[356,1448,510],{"class":376},[356,1450,513],{"class":399},[356,1452,510],{"class":376},[356,1454,1455],{"class":389},"Add",[356,1457,393],{"class":376},[356,1459,358],{"class":399},[356,1461,403],{"class":376},[356,1463,1464],{"class":358,"line":684},[356,1465,415],{"emptyLinePlaceholder":194},[356,1467,1468,1470,1473,1475,1477,1480,1482,1485],{"class":358,"line":691},[356,1469,1211],{"class":362},[356,1471,1472],{"class":399}," orderRepository",[356,1474,638],{"class":376},[356,1476,893],{"class":362},[356,1478,1479],{"class":369}," Mock",[356,1481,899],{"class":376},[356,1483,1484],{"class":369},"ICommerceOrderRepository",[356,1486,905],{"class":376},[356,1488,1489],{"class":358,"line":716},[356,1490,1491],{"class":399},"orderRepository\n",[356,1493,1494,1497,1500,1502,1505,1507,1509,1511,1513,1515,1517],{"class":358,"line":736},[356,1495,1496],{"class":376},"    .",[356,1498,1499],{"class":389},"Setup",[356,1501,393],{"class":376},[356,1503,1504],{"class":399},"r",[356,1506,525],{"class":376},[356,1508,1504],{"class":399},[356,1510,510],{"class":376},[356,1512,390],{"class":389},[356,1514,393],{"class":376},[356,1516,650],{"class":399},[356,1518,1519],{"class":376},"))\n",[356,1521,1522,1524,1527,1529,1531],{"class":358,"line":823},[356,1523,1496],{"class":376},[356,1525,1526],{"class":389},"Returns",[356,1528,393],{"class":376},[356,1530,711],{"class":399},[356,1532,403],{"class":376},[356,1534,1535],{"class":358,"line":829},[356,1536,415],{"emptyLinePlaceholder":194},[356,1538,1540,1542,1544,1546,1548,1550,1552,1555],{"class":358,"line":1539},32,[356,1541,1211],{"class":362},[356,1543,593],{"class":399},[356,1545,638],{"class":376},[356,1547,893],{"class":362},[356,1549,1479],{"class":369},[356,1551,899],{"class":376},[356,1553,1554],{"class":369},"IShippingRateCalculator",[356,1556,905],{"class":376},[356,1558,1560],{"class":358,"line":1559},33,[356,1561,1562],{"class":399},"rateCalculator\n",[356,1564,1566,1568,1570,1572,1575,1577,1579,1581,1583,1585,1587],{"class":358,"line":1565},34,[356,1567,1496],{"class":376},[356,1569,1499],{"class":389},[356,1571,393],{"class":376},[356,1573,1574],{"class":399},"c",[356,1576,525],{"class":376},[356,1578,1574],{"class":399},[356,1580,510],{"class":376},[356,1582,706],{"class":389},[356,1584,393],{"class":376},[356,1586,711],{"class":399},[356,1588,1519],{"class":376},[356,1590,1592,1594,1596,1598,1601],{"class":358,"line":1591},35,[356,1593,1496],{"class":376},[356,1595,1526],{"class":389},[356,1597,393],{"class":376},[356,1599,1600],{"class":1199},"2.5",[356,1602,403],{"class":376},[356,1604,1606],{"class":358,"line":1605},36,[356,1607,415],{"emptyLinePlaceholder":194},[356,1609,1611,1613,1616,1618,1620,1622],{"class":358,"line":1610},37,[356,1612,1211],{"class":362},[356,1614,1615],{"class":399}," sut",[356,1617,638],{"class":376},[356,1619,893],{"class":362},[356,1621,569],{"class":369},[356,1623,572],{"class":376},[356,1625,1627,1630,1632,1635],{"class":358,"line":1626},38,[356,1628,1629],{"class":399},"    orderRepository",[356,1631,510],{"class":376},[356,1633,1634],{"class":399},"Object",[356,1636,584],{"class":376},[356,1638,1640,1643,1645,1647],{"class":358,"line":1639},39,[356,1641,1642],{"class":399},"    rateCalculator",[356,1644,510],{"class":376},[356,1646,1634],{"class":399},[356,1648,403],{"class":376},[356,1650,1652],{"class":358,"line":1651},40,[356,1653,415],{"emptyLinePlaceholder":194},[356,1655,1657,1659,1662,1664,1667,1669,1672,1674,1676],{"class":358,"line":1656},41,[356,1658,1211],{"class":362},[356,1660,1661],{"class":399}," label",[356,1663,638],{"class":376},[356,1665,1666],{"class":399},"sut",[356,1668,510],{"class":376},[356,1670,1671],{"class":389},"CreateLabel",[356,1673,393],{"class":376},[356,1675,650],{"class":399},[356,1677,403],{"class":376},[356,1679,1681],{"class":358,"line":1680},42,[356,1682,415],{"emptyLinePlaceholder":194},[356,1684,1686,1689,1691,1694,1696,1698,1701,1704],{"class":358,"line":1685},43,[356,1687,1688],{"class":399},"Assert",[356,1690,510],{"class":376},[356,1692,1693],{"class":389},"Contains",[356,1695,393],{"class":376},[356,1697,1341],{"class":673},[356,1699,1700],{"class":376},", ",[356,1702,1703],{"class":399},"label",[356,1705,403],{"class":376},[356,1707,1709,1711,1713,1715,1717,1720,1722,1724],{"class":358,"line":1708},44,[356,1710,1688],{"class":399},[356,1712,510],{"class":376},[356,1714,1693],{"class":389},[356,1716,393],{"class":376},[356,1718,1719],{"class":673},"\"Denmark\"",[356,1721,1700],{"class":376},[356,1723,1703],{"class":399},[356,1725,403],{"class":376},[356,1727,1729,1731,1733,1735,1737,1740,1742,1744],{"class":358,"line":1728},45,[356,1730,1688],{"class":399},[356,1732,510],{"class":376},[356,1734,1693],{"class":389},[356,1736,393],{"class":376},[356,1738,1739],{"class":673},"\"2.5\"",[356,1741,1700],{"class":376},[356,1743,1703],{"class":399},[356,1745,403],{"class":376},[293,1747,1748],{},"This works, but it has drawbacks:",[302,1750,1751,1757,1763,1769],{},[305,1752,1753,1756],{},[320,1754,1755],{},"Arrange dominates the test"," — most lines exist only to satisfy validation, not to express what you are verifying",[305,1758,1759,1762],{},[320,1760,1761],{},"Repeated data"," — shipping and billing addresses are duplicated even though the assertion only reads the shipping label",[305,1764,1765,1768],{},[320,1766,1767],{},"Incidental values"," — product id, price, and street names add noise when the test cares about name, country, and weight on the label",[305,1770,1771,1774,1775,1778],{},[320,1772,1773],{},"Manual SUT wiring"," — ",[332,1776,1777],{},"new ShippingLabelService(...)"," repeats constructor parameters you will repeat in every test for this service",[297,1780,1782],{"id":1781},"step-1-refactor-the-service-dependencies","Step 1 — refactor the service dependencies",[293,1784,1785,1786,1788,1789,1791,1792,1794],{},"Install ",[311,1787,217],{"href":115}," and an explicit latest ",[320,1790,322],{}," reference if you have not already (do not rely only on AutoMoq's low transitive Moq dependency), then customize the fixture so AutoFixture creates the service without ",[332,1793,1777],{},". Mock only collaborators that cross a process boundary.",[293,1796,1797,1799,1800,1803,1804,1807],{},[332,1798,1484],{}," loads data from storage — mock it. ",[332,1801,1802],{},"ShippingRateCalculator"," only sums order line weights in memory; it does not call databases, HTTP APIs, or the file system. In a ",[320,1805,1806],{},"classicist"," unit test, keep that kind of collaborator real and mock I\u002FO at the edge.",[347,1809,1811],{"className":349,"code":1810,"language":351,"meta":352,"style":352},"const uint orderId = 1001;\n\n\u002F\u002F ... build product, order, addresses, and order lines by hand ...\n\nvar fixture = new Fixture().Customize(new AutoMoqCustomization());\n\nvar orderRepository = fixture.Freeze\u003CMock\u003CICommerceOrderRepository>>();\norderRepository\n    .Setup(r => r.GetById(orderId))\n    .Returns(order);\n\nvar rateCalculator = fixture.Freeze\u003CShippingRateCalculator>();\nfixture.Inject\u003CIShippingRateCalculator>(rateCalculator);\n\nvar sut = fixture.Create\u003CShippingLabelService>();\n\nvar label = sut.CreateLabel(orderId);\n\n\u002F\u002F ... Assert.Contains for name, country, and \"2.5\" ...\n",[332,1812,1813,1827,1831,1836,1840,1870,1874,1902,1906,1930,1942,1946,1966,1986,1990,2012,2016,2036,2040],{"__ignoreMap":352},[356,1814,1815,1817,1819,1821,1823,1825],{"class":358,"line":359},[356,1816,1190],{"class":362},[356,1818,920],{"class":362},[356,1820,619],{"class":399},[356,1822,638],{"class":376},[356,1824,1200],{"class":1199},[356,1826,733],{"class":376},[356,1828,1829],{"class":358,"line":373},[356,1830,415],{"emptyLinePlaceholder":194},[356,1832,1833],{"class":358,"line":380},[356,1834,1835],{"class":687},"\u002F\u002F ... build product, order, addresses, and order lines by hand ...\n",[356,1837,1838],{"class":358,"line":406},[356,1839,415],{"emptyLinePlaceholder":194},[356,1841,1842,1844,1847,1849,1851,1854,1857,1860,1862,1864,1867],{"class":358,"line":412},[356,1843,1211],{"class":362},[356,1845,1846],{"class":399}," fixture",[356,1848,638],{"class":376},[356,1850,893],{"class":362},[356,1852,1853],{"class":369}," Fixture",[356,1855,1856],{"class":376},"().",[356,1858,1859],{"class":389},"Customize",[356,1861,393],{"class":376},[356,1863,893],{"class":362},[356,1865,1866],{"class":369}," AutoMoqCustomization",[356,1868,1869],{"class":376},"());\n",[356,1871,1872],{"class":358,"line":418},[356,1873,415],{"emptyLinePlaceholder":194},[356,1875,1876,1878,1880,1882,1885,1887,1890,1892,1895,1897,1899],{"class":358,"line":428},[356,1877,1211],{"class":362},[356,1879,1472],{"class":399},[356,1881,638],{"class":376},[356,1883,1884],{"class":399},"fixture",[356,1886,510],{"class":376},[356,1888,1889],{"class":389},"Freeze",[356,1891,899],{"class":376},[356,1893,1894],{"class":369},"Mock",[356,1896,899],{"class":376},[356,1898,1484],{"class":369},[356,1900,1901],{"class":376},">>();\n",[356,1903,1904],{"class":358,"line":433},[356,1905,1491],{"class":399},[356,1907,1908,1910,1912,1914,1916,1918,1920,1922,1924,1926,1928],{"class":358,"line":452},[356,1909,1496],{"class":376},[356,1911,1499],{"class":389},[356,1913,393],{"class":376},[356,1915,1504],{"class":399},[356,1917,525],{"class":376},[356,1919,1504],{"class":399},[356,1921,510],{"class":376},[356,1923,390],{"class":389},[356,1925,393],{"class":376},[356,1927,650],{"class":399},[356,1929,1519],{"class":376},[356,1931,1932,1934,1936,1938,1940],{"class":358,"line":457},[356,1933,1496],{"class":376},[356,1935,1526],{"class":389},[356,1937,393],{"class":376},[356,1939,711],{"class":399},[356,1941,403],{"class":376},[356,1943,1944],{"class":358,"line":462},[356,1945,415],{"emptyLinePlaceholder":194},[356,1947,1948,1950,1952,1954,1956,1958,1960,1962,1964],{"class":358,"line":479},[356,1949,1211],{"class":362},[356,1951,593],{"class":399},[356,1953,638],{"class":376},[356,1955,1884],{"class":399},[356,1957,510],{"class":376},[356,1959,1889],{"class":389},[356,1961,899],{"class":376},[356,1963,1802],{"class":369},[356,1965,905],{"class":376},[356,1967,1968,1970,1972,1975,1977,1979,1982,1984],{"class":358,"line":484},[356,1969,1884],{"class":399},[356,1971,510],{"class":376},[356,1973,1974],{"class":389},"Inject",[356,1976,899],{"class":376},[356,1978,1554],{"class":369},[356,1980,1981],{"class":376},">(",[356,1983,701],{"class":399},[356,1985,403],{"class":376},[356,1987,1988],{"class":358,"line":504},[356,1989,415],{"emptyLinePlaceholder":194},[356,1991,1992,1994,1996,1998,2000,2002,2005,2007,2010],{"class":358,"line":552},[356,1993,1211],{"class":362},[356,1995,1615],{"class":399},[356,1997,638],{"class":376},[356,1999,1884],{"class":399},[356,2001,510],{"class":376},[356,2003,2004],{"class":389},"Create",[356,2006,899],{"class":376},[356,2008,2009],{"class":369},"ShippingLabelService",[356,2011,905],{"class":376},[356,2013,2014],{"class":358,"line":557},[356,2015,415],{"emptyLinePlaceholder":194},[356,2017,2018,2020,2022,2024,2026,2028,2030,2032,2034],{"class":358,"line":562},[356,2019,1211],{"class":362},[356,2021,1661],{"class":399},[356,2023,638],{"class":376},[356,2025,1666],{"class":399},[356,2027,510],{"class":376},[356,2029,1671],{"class":389},[356,2031,393],{"class":376},[356,2033,650],{"class":399},[356,2035,403],{"class":376},[356,2037,2038],{"class":358,"line":575},[356,2039,415],{"emptyLinePlaceholder":194},[356,2041,2042],{"class":358,"line":587},[356,2043,2044],{"class":687},"\u002F\u002F ... Assert.Contains for name, country, and \"2.5\" ...\n",[293,2046,2047,2048,2050,2051,2053,2054,510],{},"The order graph is still built by hand, but you drop manual SUT construction and the rate-calculator mock setup. AutoMoq supplies the repository mock; ",[332,2049,1889],{}," + ",[332,2052,1974],{}," register the real calculator as ",[332,2055,1554],{},[293,2057,2058,2061],{},[320,2059,2060],{},"What improved:"," less constructor noise; weight on the label now comes from real calculator logic instead of a hard-coded mock return value.",[293,2063,2064,2067,2068,2071],{},[320,2065,2066],{},"What is still painful:"," the order, addresses, product, and repository ",[332,2069,2070],{},".Setup"," block are unchanged.",[297,2073,2075],{"id":2074},"step-2-refactor-the-test-data","Step 2 — refactor the test data",[293,2077,2078,2079,2082],{},"Generate anonymous specimens where values do not matter. Use ",[332,2080,2081],{},"Build"," only for fields the test or service rules require:",[347,2084,2086],{"className":349,"code":2085,"language":351,"meta":352,"style":352},"var fixture = new Fixture().Customize(new AutoMoqCustomization());\n\nvar orderRepository = fixture.Freeze\u003CMock\u003CICommerceOrderRepository>>();\nvar rateCalculator = fixture.Freeze\u003CShippingRateCalculator>();\nfixture.Inject\u003CIShippingRateCalculator>(rateCalculator);\n\nvar shippingAddress = fixture.Build\u003CShippingAddress>()\n    .With(a => a.Name, \"Jane Doe\")\n    .With(a => a.Country, \"Denmark\")\n    .Create();\n\nvar product = fixture.Build\u003CProduct>()\n    .With(p => p.Weight, 1.25)\n    .Create();\n\nvar line = fixture.Build\u003COrderLine>()\n    .FromFactory(() => new OrderLine(product))\n    .With(l => l.Quantity, 2u)\n    .Create();\n\nvar order = fixture.Build\u003COrder>()\n    .Do(o => o.OrderLines.Add(line))\n    .With(o => o.ShippingAddress, shippingAddress)\n    .With(o => o.BillingAddress, shippingAddress)\n    .Create();\n\norderRepository.Setup(r => r.GetById(order.Id)).Returns(order);\n\nvar sut = fixture.Create\u003CShippingLabelService>();\nvar label = sut.CreateLabel(order.Id);\n\nAssert.Contains(\"Jane Doe\", label);\nAssert.Contains(\"Denmark\", label);\nAssert.Contains(\"2.5\", label);\n",[332,2087,2088,2112,2116,2140,2160,2178,2182,2204,2229,2253,2261,2265,2285,2310,2318,2322,2342,2362,2388,2396,2400,2420,2450,2475,2499,2507,2511,2552,2556,2576,2600,2604,2622,2640],{"__ignoreMap":352},[356,2089,2090,2092,2094,2096,2098,2100,2102,2104,2106,2108,2110],{"class":358,"line":359},[356,2091,1211],{"class":362},[356,2093,1846],{"class":399},[356,2095,638],{"class":376},[356,2097,893],{"class":362},[356,2099,1853],{"class":369},[356,2101,1856],{"class":376},[356,2103,1859],{"class":389},[356,2105,393],{"class":376},[356,2107,893],{"class":362},[356,2109,1866],{"class":369},[356,2111,1869],{"class":376},[356,2113,2114],{"class":358,"line":373},[356,2115,415],{"emptyLinePlaceholder":194},[356,2117,2118,2120,2122,2124,2126,2128,2130,2132,2134,2136,2138],{"class":358,"line":380},[356,2119,1211],{"class":362},[356,2121,1472],{"class":399},[356,2123,638],{"class":376},[356,2125,1884],{"class":399},[356,2127,510],{"class":376},[356,2129,1889],{"class":389},[356,2131,899],{"class":376},[356,2133,1894],{"class":369},[356,2135,899],{"class":376},[356,2137,1484],{"class":369},[356,2139,1901],{"class":376},[356,2141,2142,2144,2146,2148,2150,2152,2154,2156,2158],{"class":358,"line":406},[356,2143,1211],{"class":362},[356,2145,593],{"class":399},[356,2147,638],{"class":376},[356,2149,1884],{"class":399},[356,2151,510],{"class":376},[356,2153,1889],{"class":389},[356,2155,899],{"class":376},[356,2157,1802],{"class":369},[356,2159,905],{"class":376},[356,2161,2162,2164,2166,2168,2170,2172,2174,2176],{"class":358,"line":412},[356,2163,1884],{"class":399},[356,2165,510],{"class":376},[356,2167,1974],{"class":389},[356,2169,899],{"class":376},[356,2171,1554],{"class":369},[356,2173,1981],{"class":376},[356,2175,701],{"class":399},[356,2177,403],{"class":376},[356,2179,2180],{"class":358,"line":418},[356,2181,415],{"emptyLinePlaceholder":194},[356,2183,2184,2186,2189,2191,2193,2195,2197,2199,2201],{"class":358,"line":428},[356,2185,1211],{"class":362},[356,2187,2188],{"class":399}," shippingAddress",[356,2190,638],{"class":376},[356,2192,1884],{"class":399},[356,2194,510],{"class":376},[356,2196,2081],{"class":389},[356,2198,899],{"class":376},[356,2200,730],{"class":369},[356,2202,2203],{"class":376},">()\n",[356,2205,2206,2208,2211,2213,2215,2217,2219,2221,2223,2225,2227],{"class":358,"line":433},[356,2207,1496],{"class":376},[356,2209,2210],{"class":389},"With",[356,2212,393],{"class":376},[356,2214,311],{"class":399},[356,2216,525],{"class":376},[356,2218,311],{"class":399},[356,2220,510],{"class":376},[356,2222,754],{"class":399},[356,2224,1700],{"class":376},[356,2226,1341],{"class":673},[356,2228,596],{"class":376},[356,2230,2231,2233,2235,2237,2239,2241,2243,2245,2247,2249,2251],{"class":358,"line":452},[356,2232,1496],{"class":376},[356,2234,2210],{"class":389},[356,2236,393],{"class":376},[356,2238,311],{"class":399},[356,2240,525],{"class":376},[356,2242,311],{"class":399},[356,2244,510],{"class":376},[356,2246,795],{"class":399},[356,2248,1700],{"class":376},[356,2250,1719],{"class":673},[356,2252,596],{"class":376},[356,2254,2255,2257,2259],{"class":358,"line":457},[356,2256,1496],{"class":376},[356,2258,2004],{"class":389},[356,2260,1003],{"class":376},[356,2262,2263],{"class":358,"line":462},[356,2264,415],{"emptyLinePlaceholder":194},[356,2266,2267,2269,2271,2273,2275,2277,2279,2281,2283],{"class":358,"line":479},[356,2268,1211],{"class":362},[356,2270,1214],{"class":399},[356,2272,638],{"class":376},[356,2274,1884],{"class":399},[356,2276,510],{"class":376},[356,2278,2081],{"class":389},[356,2280,899],{"class":376},[356,2282,532],{"class":369},[356,2284,2203],{"class":376},[356,2286,2287,2289,2291,2293,2295,2297,2299,2301,2303,2305,2308],{"class":358,"line":484},[356,2288,1496],{"class":376},[356,2290,2210],{"class":389},[356,2292,393],{"class":376},[356,2294,293],{"class":399},[356,2296,525],{"class":376},[356,2298,293],{"class":399},[356,2300,510],{"class":376},[356,2302,537],{"class":399},[356,2304,1700],{"class":376},[356,2306,2307],{"class":1199},"1.25",[356,2309,596],{"class":376},[356,2311,2312,2314,2316],{"class":358,"line":504},[356,2313,1496],{"class":376},[356,2315,2004],{"class":389},[356,2317,1003],{"class":376},[356,2319,2320],{"class":358,"line":552},[356,2321,415],{"emptyLinePlaceholder":194},[356,2323,2324,2326,2328,2330,2332,2334,2336,2338,2340],{"class":358,"line":557},[356,2325,1211],{"class":362},[356,2327,1266],{"class":399},[356,2329,638],{"class":376},[356,2331,1884],{"class":399},[356,2333,510],{"class":376},[356,2335,2081],{"class":389},[356,2337,899],{"class":376},[356,2339,902],{"class":369},[356,2341,2203],{"class":376},[356,2343,2344,2346,2349,2352,2354,2356,2358,2360],{"class":358,"line":562},[356,2345,1496],{"class":376},[356,2347,2348],{"class":389},"FromFactory",[356,2350,2351],{"class":376},"(() => ",[356,2353,893],{"class":362},[356,2355,1273],{"class":369},[356,2357,393],{"class":376},[356,2359,1278],{"class":399},[356,2361,1519],{"class":376},[356,2363,2364,2366,2368,2370,2373,2375,2377,2379,2381,2383,2386],{"class":358,"line":575},[356,2365,1496],{"class":376},[356,2367,2210],{"class":389},[356,2369,393],{"class":376},[356,2371,2372],{"class":399},"l",[356,2374,525],{"class":376},[356,2376,2372],{"class":399},[356,2378,510],{"class":376},[356,2380,547],{"class":399},[356,2382,1700],{"class":376},[356,2384,2385],{"class":1199},"2u",[356,2387,596],{"class":376},[356,2389,2390,2392,2394],{"class":358,"line":587},[356,2391,1496],{"class":376},[356,2393,2004],{"class":389},[356,2395,1003],{"class":376},[356,2397,2398],{"class":358,"line":599},[356,2399,415],{"emptyLinePlaceholder":194},[356,2401,2402,2404,2406,2408,2410,2412,2414,2416,2418],{"class":358,"line":604},[356,2403,1211],{"class":362},[356,2405,447],{"class":399},[356,2407,638],{"class":376},[356,2409,1884],{"class":399},[356,2411,510],{"class":376},[356,2413,2081],{"class":389},[356,2415,899],{"class":376},[356,2417,444],{"class":369},[356,2419,2203],{"class":376},[356,2421,2422,2424,2427,2429,2432,2434,2436,2438,2440,2442,2444,2446,2448],{"class":358,"line":624},[356,2423,1496],{"class":376},[356,2425,2426],{"class":389},"Do",[356,2428,393],{"class":376},[356,2430,2431],{"class":399},"o",[356,2433,525],{"class":376},[356,2435,2431],{"class":399},[356,2437,510],{"class":376},[356,2439,513],{"class":399},[356,2441,510],{"class":376},[356,2443,1455],{"class":389},[356,2445,393],{"class":376},[356,2447,358],{"class":399},[356,2449,1519],{"class":376},[356,2451,2452,2454,2456,2458,2460,2462,2464,2466,2468,2470,2473],{"class":358,"line":630},[356,2453,1496],{"class":376},[356,2455,2210],{"class":389},[356,2457,393],{"class":376},[356,2459,2431],{"class":399},[356,2461,525],{"class":376},[356,2463,2431],{"class":399},[356,2465,510],{"class":376},[356,2467,730],{"class":399},[356,2469,1700],{"class":376},[356,2471,2472],{"class":399},"shippingAddress",[356,2474,596],{"class":376},[356,2476,2477,2479,2481,2483,2485,2487,2489,2491,2493,2495,2497],{"class":358,"line":655},[356,2478,1496],{"class":376},[356,2480,2210],{"class":389},[356,2482,393],{"class":376},[356,2484,2431],{"class":399},[356,2486,525],{"class":376},[356,2488,2431],{"class":399},[356,2490,510],{"class":376},[356,2492,1390],{"class":399},[356,2494,1700],{"class":376},[356,2496,2472],{"class":399},[356,2498,596],{"class":376},[356,2500,2501,2503,2505],{"class":358,"line":679},[356,2502,1496],{"class":376},[356,2504,2004],{"class":389},[356,2506,1003],{"class":376},[356,2508,2509],{"class":358,"line":684},[356,2510,415],{"emptyLinePlaceholder":194},[356,2512,2513,2516,2518,2520,2522,2524,2526,2528,2530,2532,2534,2536,2538,2541,2544,2546,2548,2550],{"class":358,"line":691},[356,2514,2515],{"class":399},"orderRepository",[356,2517,510],{"class":376},[356,2519,1499],{"class":389},[356,2521,393],{"class":376},[356,2523,1504],{"class":399},[356,2525,525],{"class":376},[356,2527,1504],{"class":399},[356,2529,510],{"class":376},[356,2531,390],{"class":389},[356,2533,393],{"class":376},[356,2535,711],{"class":399},[356,2537,510],{"class":376},[356,2539,2540],{"class":399},"Id",[356,2542,2543],{"class":376},")).",[356,2545,1526],{"class":389},[356,2547,393],{"class":376},[356,2549,711],{"class":399},[356,2551,403],{"class":376},[356,2553,2554],{"class":358,"line":716},[356,2555,415],{"emptyLinePlaceholder":194},[356,2557,2558,2560,2562,2564,2566,2568,2570,2572,2574],{"class":358,"line":736},[356,2559,1211],{"class":362},[356,2561,1615],{"class":399},[356,2563,638],{"class":376},[356,2565,1884],{"class":399},[356,2567,510],{"class":376},[356,2569,2004],{"class":389},[356,2571,899],{"class":376},[356,2573,2009],{"class":369},[356,2575,905],{"class":376},[356,2577,2578,2580,2582,2584,2586,2588,2590,2592,2594,2596,2598],{"class":358,"line":823},[356,2579,1211],{"class":362},[356,2581,1661],{"class":399},[356,2583,638],{"class":376},[356,2585,1666],{"class":399},[356,2587,510],{"class":376},[356,2589,1671],{"class":389},[356,2591,393],{"class":376},[356,2593,711],{"class":399},[356,2595,510],{"class":376},[356,2597,2540],{"class":399},[356,2599,403],{"class":376},[356,2601,2602],{"class":358,"line":829},[356,2603,415],{"emptyLinePlaceholder":194},[356,2605,2606,2608,2610,2612,2614,2616,2618,2620],{"class":358,"line":1539},[356,2607,1688],{"class":399},[356,2609,510],{"class":376},[356,2611,1693],{"class":389},[356,2613,393],{"class":376},[356,2615,1341],{"class":673},[356,2617,1700],{"class":376},[356,2619,1703],{"class":399},[356,2621,403],{"class":376},[356,2623,2624,2626,2628,2630,2632,2634,2636,2638],{"class":358,"line":1559},[356,2625,1688],{"class":399},[356,2627,510],{"class":376},[356,2629,1693],{"class":389},[356,2631,393],{"class":376},[356,2633,1719],{"class":673},[356,2635,1700],{"class":376},[356,2637,1703],{"class":399},[356,2639,403],{"class":376},[356,2641,2642,2644,2646,2648,2650,2652,2654,2656],{"class":358,"line":1565},[356,2643,1688],{"class":399},[356,2645,510],{"class":376},[356,2647,1693],{"class":389},[356,2649,393],{"class":376},[356,2651,1739],{"class":673},[356,2653,1700],{"class":376},[356,2655,1703],{"class":399},[356,2657,403],{"class":376},[293,2659,2660,2661,1170,2663,2665,2666,2668,2669,2671],{},"Pin values the assertion depends on (",[332,2662,537],{},[332,2664,547],{}," → ",[332,2667,1600],{}," kg). Do not re-call ",[332,2670,706],{}," in the assert — that only proves the SUT and the assert used the same collaborator. Assert a known expected result from known inputs instead.",[293,2673,2674],{},[320,2675,2060],{},[302,2677,2678,2684,2690,2696],{},[305,2679,2680,2683],{},[320,2681,2682],{},"Pin only what matters"," — name and country for the destination; weight and quantity for the kg line on the label",[305,2685,2686,2689],{},[320,2687,2688],{},"Reuse one address"," — billing and shipping share the same instance instead of duplicating five fields",[305,2691,2692,2695],{},[320,2693,2694],{},"Anonymous filler"," — order id, street, zip, and product id come from AutoFixture",[305,2697,2698,1774,2701,2704],{},[320,2699,2700],{},"Known expected value",[332,2702,2703],{},"Assert.Contains(\"2.5\", label)"," matches the classic example",[297,2706,2708],{"id":2707},"how-it-works","How it works",[302,2710,2711,2717,2723,2732,2738,2751],{},[305,2712,2713,2716],{},[332,2714,2715],{},"AutoMoqCustomization"," — creates Moq mocks for interface constructor parameters you do not replace",[305,2718,2719,2722],{},[332,2720,2721],{},"Freeze\u003CMock\u003CT>>()"," — one shared mock instance for setup and verification",[305,2724,2725,2050,2728,2731],{},[332,2726,2727],{},"Freeze\u003CT>()",[332,2729,2730],{},"Inject\u003CI>()"," — freeze a concrete type and supply it wherever the interface is requested",[305,2733,2734,2737],{},[332,2735,2736],{},"Create\u003CT>()"," — anonymous values for properties the test does not care about",[305,2739,2740,2050,2743,2745,2746,2745,2748,2750],{},[332,2741,2742],{},"Build\u003CT>()",[332,2744,2210],{}," \u002F ",[332,2747,2426],{},[332,2749,2348],{}," — pin properties, add items to read-only collections, or control construction",[305,2752,2753,2755,2756,2759,2760,2763],{},[332,2754,2348],{}," — required when a type needs a constructor argument you already built (here, ",[332,2757,2758],{},"OrderLine(Product)","); AutoFixture cannot invent that graph from ",[332,2761,2762],{},"Create\u003COrderLine>()"," alone if you need a specific product instance",[293,2765,2766,2767,2770,2771,2773],{},"Plain ",[332,2768,2769],{},"Create\u003COrder>()"," still fails here because the service validates line items, addresses, and weight. ",[332,2772,2081],{}," lets you satisfy those rules without a fully manual graph.",[297,2775,2777],{"id":2776},"next-steps","Next steps",[302,2779,2780,2784,2789,2793,2797],{},[305,2781,2782],{},[311,2783,17],{"href":18},[305,2785,2786],{},[311,2787,2788],{"href":102},"Integrations overview",[305,2790,2791],{},[311,2792,114],{"href":115},[305,2794,2795],{},[311,2796,44],{"href":45},[305,2798,2799],{},[311,2800,78],{"href":79},[2802,2803,2804],"style",{},"html pre.shiki code .stxUP, html code.shiki .stxUP{--shiki-light:#0000FF;--shiki-default:#0000FF;--shiki-dark:#569CD6}html pre.shiki code .sopvc, html code.shiki .sopvc{--shiki-light:#267F99;--shiki-default:#267F99;--shiki-dark:#4EC9B0}html pre.shiki code .s_Yst, html code.shiki .s_Yst{--shiki-light:#000000;--shiki-default:#000000;--shiki-dark:#D4D4D4}html pre.shiki code .swoLU, html code.shiki .swoLU{--shiki-light:#795E26;--shiki-default:#795E26;--shiki-dark:#DCDCAA}html pre.shiki code .sswaR, html code.shiki .sswaR{--shiki-light:#001080;--shiki-default:#001080;--shiki-dark:#9CDCFE}html pre.shiki code .smUd-, html code.shiki .smUd-{--shiki-light:#AF00DB;--shiki-default:#AF00DB;--shiki-dark:#C586C0}html pre.shiki code .sFD8J, html code.shiki .sFD8J{--shiki-light:#A31515;--shiki-default:#A31515;--shiki-dark:#CE9178}html pre.shiki code .sYH5r, html code.shiki .sYH5r{--shiki-light:#008000;--shiki-default:#008000;--shiki-dark:#6A9955}html pre.shiki code .sw10w, html code.shiki .sw10w{--shiki-light:#000000FF;--shiki-default:#000000FF;--shiki-dark:#D4D4D4}html pre.shiki code .sbve-, html code.shiki .sbve-{--shiki-light:#EE0000;--shiki-default:#EE0000;--shiki-dark:#D7BA7D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s-S-M, html code.shiki .s-S-M{--shiki-light:#098658;--shiki-default:#098658;--shiki-dark:#B5CEA8}",{"title":352,"searchDepth":373,"depth":373,"links":2806},[2807,2808,2809,2810,2811,2812,2813,2814],{"id":299,"depth":373,"text":300},{"id":326,"depth":373,"text":327},{"id":341,"depth":373,"text":342},{"id":1176,"depth":373,"text":1177},{"id":1781,"depth":373,"text":1782},{"id":2074,"depth":373,"text":2075},{"id":2707,"depth":373,"text":2708},{"id":2776,"depth":373,"text":2777},"Replace verbose arrange code with AutoFixture when a service test needs nested data and injected dependencies.","md",{},{"title":29,"description":2815},"LhmxR6KgarugIMxqGNRnkRumKbVtpJHjxnMontul15A",[2821,2822],{"title":25,"path":26,"stem":27,"children":-1},{"title":40,"path":41,"stem":42,"children":-1},1788856648546]