[{"data":1,"prerenderedAt":1853},["ShallowReactive",2],{"docs-navigation":3,"api-catalog":188,"api-nav-empty":286,"docs:\u002Fdocs\u002Fintegrations\u002Fautonsubstitute":287,"docs:\u002Fdocs\u002Fintegrations\u002Fautonsubstitute-surround":1850},[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":122,"badge":11,"body":289,"description":1845,"extension":1846,"meta":1847,"navigation":194,"path":123,"seo":1848,"stem":124,"updated":11,"__hash__":1849},"docs\u002Fdocs\u002F5.integrations\u002F06.autonsubstitute.md",{"type":290,"value":291,"toc":1830},"minimark",[292,303,309,314,328,332,341,352,443,447,462,466,644,659,671,685,689,698,705,785,850,981,994,998,1009,1089,1148,1152,1159,1193,1283,1290,1410,1419,1430,1439,1461,1464,1467,1474,1611,1616,1619,1634,1640,1706,1712,1716,1764,1768,1796,1800,1826],[293,294,295,302],"p",{},[296,297,301],"a",{"href":298,"rel":299},"https:\u002F\u002Fnsubstitute.github.io\u002F",[300],"nofollow","NSubstitute"," is a .NET mocking library with a substitute-focused API. You create substitutes for interfaces and abstract types, then configure returns and assert received calls.",[293,304,305,308],{},[306,307,223],"strong",{}," plugs NSubstitute into AutoFixture. When AutoFixture builds an object graph and needs an interface or abstract dependency, AutoNSubstitute supplies a substitute instead of failing — so collaborators resolve automatically and you can assert on them with less manual setup.",[310,311,313],"h2",{"id":312},"prerequisites","Prerequisites",[315,316,317,321,326],"ul",{},[318,319,320],"li",{},".NET 8+ test project",[318,322,323,325],{},[296,324,193],{"href":22}," 5.0.0-rc.1",[318,327,301],{},[310,329,331],{"id":330},"install","Install",[293,333,334,335,337,338,340],{},"Install ",[306,336,223],{}," and add an explicit ",[306,339,301],{}," package reference in the same test project.",[293,342,343,344,347,348,351],{},"Pin ",[306,345,346],{},"matching versions"," of AutoFixture and AutoFixture.AutoNSubstitute. Reference the ",[306,349,350],{},"latest NSubstitute"," yourself when you update packages.",[353,354,359],"pre",{"className":355,"code":356,"language":357,"meta":358,"style":358},"language-xml shiki shiki-themes light-plus light-plus dark-plus","\u003CPackageReference Include=\"AutoFixture\" Version=\"5.0.0-rc.1\" \u002F>\n\u003CPackageReference Include=\"AutoFixture.AutoNSubstitute\" Version=\"5.0.0-rc.1\" \u002F>\n\u003CPackageReference Include=\"NSubstitute\" Version=\"5.3.0\" \u002F>\n","xml","",[360,361,362,398,420],"code",{"__ignoreMap":358},[363,364,367,371,375,379,383,387,390,392,395],"span",{"class":365,"line":366},"line",1,[363,368,370],{"class":369},"s9Xrk","\u003C",[363,372,374],{"class":373},"swrg_","PackageReference",[363,376,378],{"class":377},"ssBXb"," Include",[363,380,382],{"class":381},"s_Yst","=",[363,384,386],{"class":385},"swG-L","\"AutoFixture\"",[363,388,389],{"class":377}," Version",[363,391,382],{"class":381},[363,393,394],{"class":385},"\"5.0.0-rc.1\"",[363,396,397],{"class":369}," \u002F>\n",[363,399,401,403,405,407,409,412,414,416,418],{"class":365,"line":400},2,[363,402,370],{"class":369},[363,404,374],{"class":373},[363,406,378],{"class":377},[363,408,382],{"class":381},[363,410,411],{"class":385},"\"AutoFixture.AutoNSubstitute\"",[363,413,389],{"class":377},[363,415,382],{"class":381},[363,417,394],{"class":385},[363,419,397],{"class":369},[363,421,423,425,427,429,431,434,436,438,441],{"class":365,"line":422},3,[363,424,370],{"class":369},[363,426,374],{"class":373},[363,428,378],{"class":377},[363,430,382],{"class":381},[363,432,433],{"class":385},"\"NSubstitute\"",[363,435,389],{"class":377},[363,437,382],{"class":381},[363,439,440],{"class":385},"\"5.3.0\"",[363,442,397],{"class":369},[310,444,446],{"id":445},"example-scenario","Example scenario",[293,448,449,450,453,454,457,458,461],{},"You are testing ",[360,451,452],{},"OrderService"," with an ",[360,455,456],{},"IOrderRepository"," dependency. You want NSubstitute to create the substitute and verify ",[360,459,460],{},"Save"," was called. Other tests need substitute methods to return fixture values, or NSubstitute-backed delegates.",[310,463,465],{"id":464},"basic-usage","Basic usage",[353,467,471],{"className":468,"code":469,"language":470,"meta":358,"style":358},"language-csharp shiki shiki-themes light-plus light-plus dark-plus","var fixture = new Fixture().Customize(new AutoNSubstituteCustomization());\nvar repository = fixture.Freeze\u003CIOrderRepository>();\n\nvar service = fixture.Create\u003COrderService>();\nvar order = fixture.Create\u003COrder>();\n\nservice.PlaceOrder(order);\n\nrepository.Received(1).Save(order);\n","csharp",[360,472,473,511,536,541,564,587,592,611,616],{"__ignoreMap":358},[363,474,475,479,483,486,489,493,496,500,503,505,508],{"class":365,"line":366},[363,476,478],{"class":477},"stxUP","var",[363,480,482],{"class":481},"sswaR"," fixture",[363,484,485],{"class":381}," = ",[363,487,488],{"class":477},"new",[363,490,492],{"class":491},"sopvc"," Fixture",[363,494,495],{"class":381},"().",[363,497,499],{"class":498},"swoLU","Customize",[363,501,502],{"class":381},"(",[363,504,488],{"class":477},[363,506,507],{"class":491}," AutoNSubstituteCustomization",[363,509,510],{"class":381},"());\n",[363,512,513,515,518,520,523,526,529,531,533],{"class":365,"line":400},[363,514,478],{"class":477},[363,516,517],{"class":481}," repository",[363,519,485],{"class":381},[363,521,522],{"class":481},"fixture",[363,524,525],{"class":381},".",[363,527,528],{"class":498},"Freeze",[363,530,370],{"class":381},[363,532,456],{"class":491},[363,534,535],{"class":381},">();\n",[363,537,538],{"class":365,"line":422},[363,539,540],{"emptyLinePlaceholder":194},"\n",[363,542,544,546,549,551,553,555,558,560,562],{"class":365,"line":543},4,[363,545,478],{"class":477},[363,547,548],{"class":481}," service",[363,550,485],{"class":381},[363,552,522],{"class":481},[363,554,525],{"class":381},[363,556,557],{"class":498},"Create",[363,559,370],{"class":381},[363,561,452],{"class":491},[363,563,535],{"class":381},[363,565,567,569,572,574,576,578,580,582,585],{"class":365,"line":566},5,[363,568,478],{"class":477},[363,570,571],{"class":481}," order",[363,573,485],{"class":381},[363,575,522],{"class":481},[363,577,525],{"class":381},[363,579,557],{"class":498},[363,581,370],{"class":381},[363,583,584],{"class":491},"Order",[363,586,535],{"class":381},[363,588,590],{"class":365,"line":589},6,[363,591,540],{"emptyLinePlaceholder":194},[363,593,595,598,600,603,605,608],{"class":365,"line":594},7,[363,596,597],{"class":481},"service",[363,599,525],{"class":381},[363,601,602],{"class":498},"PlaceOrder",[363,604,502],{"class":381},[363,606,607],{"class":481},"order",[363,609,610],{"class":381},");\n",[363,612,614],{"class":365,"line":613},8,[363,615,540],{"emptyLinePlaceholder":194},[363,617,619,622,624,627,629,633,636,638,640,642],{"class":365,"line":618},9,[363,620,621],{"class":481},"repository",[363,623,525],{"class":381},[363,625,626],{"class":498},"Received",[363,628,502],{"class":381},[363,630,632],{"class":631},"s-S-M","1",[363,634,635],{"class":381},").",[363,637,460],{"class":498},[363,639,502],{"class":381},[363,641,607],{"class":481},[363,643,610],{"class":381},[293,645,646,649,650,652,653,656,657,525],{},[360,647,648],{},"Create\u003COrderService>()"," injects a substitute ",[360,651,456],{},". ",[360,654,655],{},"Freeze\u003CIOrderRepository>()"," keeps one substitute so you can assert with ",[360,658,626],{},[293,660,661,662,665,666,670],{},"NSubstitute has no separate wrapper type like Moq's ",[360,663,664],{},"Mock\u003CT>",". Freeze or create the interface (or abstract type) directly — the specimen ",[667,668,669],"em",{},"is"," the substitute.",[293,672,673,674,676,677,681,682,525],{},"Combine with ",[296,675,110],{"href":111}," via a ",[296,678,680],{"href":679},"\u002Fdocs\u002Fintegrations\u002Fxunit3#custom-autodata-attribute","custom AutoData attribute"," when tests use ",[360,683,684],{},"[AutoData]",[310,686,688],{"id":687},"substituteattribute","SubstituteAttribute",[293,690,691,697],{},[296,692,694],{"href":693},"\u002Fapi\u002Fautonsubstitute\u002F5-0-0-rc-1\u002Fautofixture.autonsubstitute.substituteattribute",[360,695,696],{},"[Substitute]"," marks an AutoData parameter, property, or field so AutoFixture creates an NSubstitute substitute of that type — even when the type is a concrete class AutoFixture would otherwise construct.",[293,699,700,701,704],{},"Use a custom AutoData attribute that applies ",[360,702,703],{},"AutoNSubstituteCustomization",":",[353,706,708],{"className":468,"code":707,"language":470,"meta":358,"style":358},"public class AutoNSubstituteDataAttribute : AutoDataAttribute\n{\n    public AutoNSubstituteDataAttribute()\n        : base(() => new Fixture().Customize(new AutoNSubstituteCustomization()))\n    {\n    }\n}\n",[360,709,710,727,732,742,770,775,780],{"__ignoreMap":358},[363,711,712,715,718,721,724],{"class":365,"line":366},[363,713,714],{"class":477},"public",[363,716,717],{"class":477}," class",[363,719,720],{"class":491}," AutoNSubstituteDataAttribute",[363,722,723],{"class":381}," : ",[363,725,726],{"class":491},"AutoDataAttribute\n",[363,728,729],{"class":365,"line":400},[363,730,731],{"class":381},"{\n",[363,733,734,737,739],{"class":365,"line":422},[363,735,736],{"class":477},"    public",[363,738,720],{"class":498},[363,740,741],{"class":381},"()\n",[363,743,744,747,750,753,755,757,759,761,763,765,767],{"class":365,"line":543},[363,745,746],{"class":381},"        : ",[363,748,749],{"class":477},"base",[363,751,752],{"class":381},"(() => ",[363,754,488],{"class":477},[363,756,492],{"class":491},[363,758,495],{"class":381},[363,760,499],{"class":498},[363,762,502],{"class":381},[363,764,488],{"class":477},[363,766,507],{"class":491},[363,768,769],{"class":381},"()))\n",[363,771,772],{"class":365,"line":566},[363,773,774],{"class":381},"    {\n",[363,776,777],{"class":365,"line":589},[363,778,779],{"class":381},"    }\n",[363,781,782],{"class":365,"line":594},[363,783,784],{"class":381},"}\n",[353,786,788],{"className":468,"code":787,"language":470,"meta":358,"style":358},"public class Calculator\n{\n    public virtual int Add(int a, int b) => a + b;\n}\n",[360,789,790,799,803,846],{"__ignoreMap":358},[363,791,792,794,796],{"class":365,"line":366},[363,793,714],{"class":477},[363,795,717],{"class":477},[363,797,798],{"class":491}," Calculator\n",[363,800,801],{"class":365,"line":400},[363,802,731],{"class":381},[363,804,805,807,810,813,816,818,821,824,827,829,832,835,837,840,843],{"class":365,"line":422},[363,806,736],{"class":477},[363,808,809],{"class":477}," virtual",[363,811,812],{"class":477}," int",[363,814,815],{"class":498}," Add",[363,817,502],{"class":381},[363,819,820],{"class":477},"int",[363,822,823],{"class":481}," a",[363,825,826],{"class":381},", ",[363,828,820],{"class":477},[363,830,831],{"class":481}," b",[363,833,834],{"class":381},") => ",[363,836,296],{"class":481},[363,838,839],{"class":381}," + ",[363,841,842],{"class":481},"b",[363,844,845],{"class":381},";\n",[363,847,848],{"class":365,"line":543},[363,849,784],{"class":381},[353,851,853],{"className":468,"code":852,"language":470,"meta":358,"style":358},"[Theory, AutoNSubstituteData]\npublic void SubstituteAttribute_CreatesSubstituteForConcreteParameter(\n    [Substitute] Calculator calculator)\n{\n    calculator.Add(1, 2).Returns(42);\n\n    Assert.Equal(42, calculator.Add(1, 2));\n}\n",[360,854,855,871,884,904,908,939,943,977],{"__ignoreMap":358},[363,856,857,860,863,865,868],{"class":365,"line":366},[363,858,859],{"class":381},"[",[363,861,862],{"class":491},"Theory",[363,864,826],{"class":381},[363,866,867],{"class":491},"AutoNSubstituteData",[363,869,870],{"class":381},"]\n",[363,872,873,875,878,881],{"class":365,"line":400},[363,874,714],{"class":477},[363,876,877],{"class":477}," void",[363,879,880],{"class":498}," SubstituteAttribute_CreatesSubstituteForConcreteParameter",[363,882,883],{"class":381},"(\n",[363,885,886,889,892,895,898,901],{"class":365,"line":422},[363,887,888],{"class":381},"    [",[363,890,891],{"class":491},"Substitute",[363,893,894],{"class":381},"] ",[363,896,897],{"class":491},"Calculator",[363,899,900],{"class":481}," calculator",[363,902,903],{"class":381},")\n",[363,905,906],{"class":365,"line":543},[363,907,731],{"class":381},[363,909,910,913,915,918,920,922,924,927,929,932,934,937],{"class":365,"line":566},[363,911,912],{"class":481},"    calculator",[363,914,525],{"class":381},[363,916,917],{"class":498},"Add",[363,919,502],{"class":381},[363,921,632],{"class":631},[363,923,826],{"class":381},[363,925,926],{"class":631},"2",[363,928,635],{"class":381},[363,930,931],{"class":498},"Returns",[363,933,502],{"class":381},[363,935,936],{"class":631},"42",[363,938,610],{"class":381},[363,940,941],{"class":365,"line":589},[363,942,540],{"emptyLinePlaceholder":194},[363,944,945,948,950,953,955,957,959,962,964,966,968,970,972,974],{"class":365,"line":594},[363,946,947],{"class":481},"    Assert",[363,949,525],{"class":381},[363,951,952],{"class":498},"Equal",[363,954,502],{"class":381},[363,956,936],{"class":631},[363,958,826],{"class":381},[363,960,961],{"class":481},"calculator",[363,963,525],{"class":381},[363,965,917],{"class":498},[363,967,502],{"class":381},[363,969,632],{"class":631},[363,971,826],{"class":381},[363,973,926],{"class":631},[363,975,976],{"class":381},"));\n",[363,978,979],{"class":365,"line":613},[363,980,784],{"class":381},[293,982,983,984,986,987,989,990,993],{},"Without ",[360,985,696],{},", AutoFixture builds a real ",[360,988,897],{}," and ",[360,991,992],{},".Returns"," does not apply. Interfaces and abstract types already become substitutes through the residue collector, so the attribute is most useful for concrete types with virtual members.",[310,995,997],{"id":996},"configuration-options","Configuration options",[293,999,1000,1005,1006,1008],{},[296,1001,1003],{"href":1002},"\u002Fapi\u002Fautonsubstitute\u002F5-0-0-rc-1\u002Fautofixture.autonsubstitute.autonsubstitutecustomization",[360,1004,703],{}," exposes properties you set before calling ",[360,1007,499],{},". Defaults are all off \u002F default relay:",[1010,1011,1012,1028],"table",{},[1013,1014,1015],"thead",{},[1016,1017,1018,1022,1025],"tr",{},[1019,1020,1021],"th",{},"Property",[1019,1023,1024],{},"Default",[1019,1026,1027],{},"Effect",[1029,1030,1031,1051,1074],"tbody",{},[1016,1032,1033,1039,1044],{},[1034,1035,1036],"td",{},[360,1037,1038],{},"ConfigureMembers",[1034,1040,1041],{},[360,1042,1043],{},"false",[1034,1045,1046,1047,1050],{},"When ",[360,1048,1049],{},"true",", substitute members return values from the fixture",[1016,1052,1053,1058,1062],{},[1034,1054,1055],{},[360,1056,1057],{},"GenerateDelegates",[1034,1059,1060],{},[360,1061,1043],{},[1034,1063,1046,1064,1066,1067,826,1070,1073],{},[360,1065,1049],{},", NSubstitute creates delegates (",[360,1068,1069],{},"Func",[360,1071,1072],{},"Action",", …)",[1016,1075,1076,1081,1086],{},[1034,1077,1078],{},[360,1079,1080],{},"Relay",[1034,1082,1083],{},[360,1084,1085],{},"SubstituteRelay",[1034,1087,1088],{},"Residue collector that turns interface\u002Fabstract requests into substitutes",[353,1090,1092],{"className":468,"code":1091,"language":470,"meta":358,"style":358},"var fixture = new Fixture().Customize(new AutoNSubstituteCustomization\n{\n    ConfigureMembers = true,\n    GenerateDelegates = true\n});\n",[360,1093,1094,1117,1121,1133,1143],{"__ignoreMap":358},[363,1095,1096,1098,1100,1102,1104,1106,1108,1110,1112,1114],{"class":365,"line":366},[363,1097,478],{"class":477},[363,1099,482],{"class":481},[363,1101,485],{"class":381},[363,1103,488],{"class":477},[363,1105,492],{"class":491},[363,1107,495],{"class":381},[363,1109,499],{"class":498},[363,1111,502],{"class":381},[363,1113,488],{"class":477},[363,1115,1116],{"class":491}," AutoNSubstituteCustomization\n",[363,1118,1119],{"class":365,"line":400},[363,1120,731],{"class":381},[363,1122,1123,1126,1128,1130],{"class":365,"line":422},[363,1124,1125],{"class":481},"    ConfigureMembers",[363,1127,485],{"class":381},[363,1129,1049],{"class":477},[363,1131,1132],{"class":381},",\n",[363,1134,1135,1138,1140],{"class":365,"line":543},[363,1136,1137],{"class":481},"    GenerateDelegates",[363,1139,485],{"class":381},[363,1141,1142],{"class":477},"true\n",[363,1144,1145],{"class":365,"line":566},[363,1146,1147],{"class":381},"});\n",[1149,1150,1038],"h3",{"id":1151},"configuremembers",[293,1153,1154,1155,1158],{},"With the default (",[360,1156,1157],{},"ConfigureMembers = false","), NSubstitute uses its usual defaults — methods return type defaults unless you configure them:",[353,1160,1162],{"className":468,"code":1161,"language":470,"meta":358,"style":358},"public interface IGreeter\n{\n    string Greet();\n}\n",[360,1163,1164,1174,1178,1189],{"__ignoreMap":358},[363,1165,1166,1168,1171],{"class":365,"line":366},[363,1167,714],{"class":477},[363,1169,1170],{"class":477}," interface",[363,1172,1173],{"class":491}," IGreeter\n",[363,1175,1176],{"class":365,"line":400},[363,1177,731],{"class":381},[363,1179,1180,1183,1186],{"class":365,"line":422},[363,1181,1182],{"class":477},"    string",[363,1184,1185],{"class":498}," Greet",[363,1187,1188],{"class":381},"();\n",[363,1190,1191],{"class":365,"line":543},[363,1192,784],{"class":381},[353,1194,1196],{"className":468,"code":1195,"language":470,"meta":358,"style":358},"var fixture = new Fixture().Customize(new AutoNSubstituteCustomization());\n\nvar greeter = fixture.Create\u003CIGreeter>();\n\nAssert.Equal(string.Empty, greeter.Greet());\n",[360,1197,1198,1222,1226,1248,1252],{"__ignoreMap":358},[363,1199,1200,1202,1204,1206,1208,1210,1212,1214,1216,1218,1220],{"class":365,"line":366},[363,1201,478],{"class":477},[363,1203,482],{"class":481},[363,1205,485],{"class":381},[363,1207,488],{"class":477},[363,1209,492],{"class":491},[363,1211,495],{"class":381},[363,1213,499],{"class":498},[363,1215,502],{"class":381},[363,1217,488],{"class":477},[363,1219,507],{"class":491},[363,1221,510],{"class":381},[363,1223,1224],{"class":365,"line":400},[363,1225,540],{"emptyLinePlaceholder":194},[363,1227,1228,1230,1233,1235,1237,1239,1241,1243,1246],{"class":365,"line":422},[363,1229,478],{"class":477},[363,1231,1232],{"class":481}," greeter",[363,1234,485],{"class":381},[363,1236,522],{"class":481},[363,1238,525],{"class":381},[363,1240,557],{"class":498},[363,1242,370],{"class":381},[363,1244,1245],{"class":491},"IGreeter",[363,1247,535],{"class":381},[363,1249,1250],{"class":365,"line":543},[363,1251,540],{"emptyLinePlaceholder":194},[363,1253,1254,1257,1259,1261,1263,1266,1268,1271,1273,1276,1278,1281],{"class":365,"line":566},[363,1255,1256],{"class":481},"Assert",[363,1258,525],{"class":381},[363,1260,952],{"class":498},[363,1262,502],{"class":381},[363,1264,1265],{"class":477},"string",[363,1267,525],{"class":381},[363,1269,1270],{"class":481},"Empty",[363,1272,826],{"class":381},[363,1274,1275],{"class":481},"greeter",[363,1277,525],{"class":381},[363,1279,1280],{"class":498},"Greet",[363,1282,510],{"class":381},[293,1284,1285,1286,1289],{},"With ",[360,1287,1288],{},"ConfigureMembers = true",", AutoFixture configures substitute members so calls return specimens from the fixture:",[353,1291,1293],{"className":468,"code":1292,"language":470,"meta":358,"style":358},"var fixture = new Fixture().Customize(new AutoNSubstituteCustomization\n{\n    ConfigureMembers = true\n});\nvar order = fixture.Freeze\u003COrder>();\n\nvar repository = fixture.Create\u003CICommerceOrderRepository>();\n\nAssert.Same(order, repository.GetById(1));\n",[360,1294,1295,1317,1321,1329,1333,1353,1357,1378,1382],{"__ignoreMap":358},[363,1296,1297,1299,1301,1303,1305,1307,1309,1311,1313,1315],{"class":365,"line":366},[363,1298,478],{"class":477},[363,1300,482],{"class":481},[363,1302,485],{"class":381},[363,1304,488],{"class":477},[363,1306,492],{"class":491},[363,1308,495],{"class":381},[363,1310,499],{"class":498},[363,1312,502],{"class":381},[363,1314,488],{"class":477},[363,1316,1116],{"class":491},[363,1318,1319],{"class":365,"line":400},[363,1320,731],{"class":381},[363,1322,1323,1325,1327],{"class":365,"line":422},[363,1324,1125],{"class":481},[363,1326,485],{"class":381},[363,1328,1142],{"class":477},[363,1330,1331],{"class":365,"line":543},[363,1332,1147],{"class":381},[363,1334,1335,1337,1339,1341,1343,1345,1347,1349,1351],{"class":365,"line":566},[363,1336,478],{"class":477},[363,1338,571],{"class":481},[363,1340,485],{"class":381},[363,1342,522],{"class":481},[363,1344,525],{"class":381},[363,1346,528],{"class":498},[363,1348,370],{"class":381},[363,1350,584],{"class":491},[363,1352,535],{"class":381},[363,1354,1355],{"class":365,"line":589},[363,1356,540],{"emptyLinePlaceholder":194},[363,1358,1359,1361,1363,1365,1367,1369,1371,1373,1376],{"class":365,"line":594},[363,1360,478],{"class":477},[363,1362,517],{"class":481},[363,1364,485],{"class":381},[363,1366,522],{"class":481},[363,1368,525],{"class":381},[363,1370,557],{"class":498},[363,1372,370],{"class":381},[363,1374,1375],{"class":491},"ICommerceOrderRepository",[363,1377,535],{"class":381},[363,1379,1380],{"class":365,"line":613},[363,1381,540],{"emptyLinePlaceholder":194},[363,1383,1384,1386,1388,1391,1393,1395,1397,1399,1401,1404,1406,1408],{"class":365,"line":618},[363,1385,1256],{"class":481},[363,1387,525],{"class":381},[363,1389,1390],{"class":498},"Same",[363,1392,502],{"class":381},[363,1394,607],{"class":481},[363,1396,826],{"class":381},[363,1398,621],{"class":481},[363,1400,525],{"class":381},[363,1402,1403],{"class":498},"GetById",[363,1405,502],{"class":381},[363,1407,632],{"class":631},[363,1409,976],{"class":381},[293,1411,1412,1413,1415,1416,1418],{},"Use ",[360,1414,1038],{}," when the SUT reads from collaborators and you want anonymous return values without configuring every member. Prefer the default when you only care about verifying calls (as in the basic ",[360,1417,626],{}," example).",[293,1420,1421,1422,1425,1426,1429],{},"The older ",[360,1423,1424],{},"AutoConfiguredNSubstituteCustomization"," type is obsolete — use ",[360,1427,1428],{},"new AutoNSubstituteCustomization { ConfigureMembers = true }"," instead.",[293,1431,1432,1434,1435,1438],{},[360,1433,1038],{}," covers most virtual members, including generics. It does ",[306,1436,1437],{},"not"," configure:",[315,1440,1441,1458],{},[318,1442,1443,1444,1447,1448,826,1451,826,1454,1457],{},"Methods inherited from ",[360,1445,1446],{},"object"," (",[360,1449,1450],{},"Equals",[360,1452,1453],{},"GetHashCode",[360,1455,1456],{},"ToString",") — NSubstitute limitation",[318,1459,1460],{},"Members that are not overridable (sealed \u002F non-virtual on concrete types)",[293,1462,1463],{},"Repeated calls with the same arguments return the same specimen by default. Configure those members with NSubstitute when you need different behavior.",[1149,1465,1057],{"id":1466},"generatedelegates",[293,1468,1469,1470,1473],{},"By default, AutoFixture's own kernel creates delegates. With ",[360,1471,1472],{},"GenerateDelegates = true",", NSubstitute creates them instead — useful when you want substitute or auto-configured delegates:",[353,1475,1477],{"className":468,"code":1476,"language":470,"meta":358,"style":358},"var fixture = new Fixture().Customize(new AutoNSubstituteCustomization\n{\n    GenerateDelegates = true,\n    ConfigureMembers = true\n});\nvar expected = fixture.Freeze\u003Cstring>();\n\nvar format = fixture.Create\u003CFunc\u003Cint, string>>();\n\nAssert.Equal(expected, format(42));\n",[360,1478,1479,1501,1505,1515,1523,1527,1548,1552,1582,1586],{"__ignoreMap":358},[363,1480,1481,1483,1485,1487,1489,1491,1493,1495,1497,1499],{"class":365,"line":366},[363,1482,478],{"class":477},[363,1484,482],{"class":481},[363,1486,485],{"class":381},[363,1488,488],{"class":477},[363,1490,492],{"class":491},[363,1492,495],{"class":381},[363,1494,499],{"class":498},[363,1496,502],{"class":381},[363,1498,488],{"class":477},[363,1500,1116],{"class":491},[363,1502,1503],{"class":365,"line":400},[363,1504,731],{"class":381},[363,1506,1507,1509,1511,1513],{"class":365,"line":422},[363,1508,1137],{"class":481},[363,1510,485],{"class":381},[363,1512,1049],{"class":477},[363,1514,1132],{"class":381},[363,1516,1517,1519,1521],{"class":365,"line":543},[363,1518,1125],{"class":481},[363,1520,485],{"class":381},[363,1522,1142],{"class":477},[363,1524,1525],{"class":365,"line":566},[363,1526,1147],{"class":381},[363,1528,1529,1531,1534,1536,1538,1540,1542,1544,1546],{"class":365,"line":589},[363,1530,478],{"class":477},[363,1532,1533],{"class":481}," expected",[363,1535,485],{"class":381},[363,1537,522],{"class":481},[363,1539,525],{"class":381},[363,1541,528],{"class":498},[363,1543,370],{"class":381},[363,1545,1265],{"class":477},[363,1547,535],{"class":381},[363,1549,1550],{"class":365,"line":594},[363,1551,540],{"emptyLinePlaceholder":194},[363,1553,1554,1556,1559,1561,1563,1565,1567,1569,1571,1573,1575,1577,1579],{"class":365,"line":613},[363,1555,478],{"class":477},[363,1557,1558],{"class":481}," format",[363,1560,485],{"class":381},[363,1562,522],{"class":481},[363,1564,525],{"class":381},[363,1566,557],{"class":498},[363,1568,370],{"class":381},[363,1570,1069],{"class":491},[363,1572,370],{"class":381},[363,1574,820],{"class":477},[363,1576,826],{"class":381},[363,1578,1265],{"class":477},[363,1580,1581],{"class":381},">>();\n",[363,1583,1584],{"class":365,"line":618},[363,1585,540],{"emptyLinePlaceholder":194},[363,1587,1589,1591,1593,1595,1597,1600,1602,1605,1607,1609],{"class":365,"line":1588},10,[363,1590,1256],{"class":481},[363,1592,525],{"class":381},[363,1594,952],{"class":498},[363,1596,502],{"class":381},[363,1598,1599],{"class":481},"expected",[363,1601,826],{"class":381},[363,1603,1604],{"class":498},"format",[363,1606,502],{"class":381},[363,1608,936],{"class":631},[363,1610,976],{"class":381},[293,1612,983,1613,1615],{},[360,1614,1038],{},", the NSubstitute delegate still exists but return values stay at NSubstitute defaults unless you configure them.",[1149,1617,1080],{"id":1618},"relay",[293,1620,1621,1623,1624,1627,1628,1633],{},[360,1622,1080],{}," is the specimen builder added to ",[360,1625,1626],{},"fixture.ResidueCollectors",". The default ",[296,1629,1631],{"href":1630},"\u002Fapi\u002Fautonsubstitute\u002F5-0-0-rc-1\u002Fautofixture.autonsubstitute.substituterelay",[360,1632,1085],{}," answers requests for interfaces and abstract types with NSubstitute substitutes.",[293,1635,1636,1637,1639],{},"Most tests leave the default. Replace it only when you need a custom residue collector — for example a ",[360,1638,1085],{}," with a different request specification:",[353,1641,1643],{"className":468,"code":1642,"language":470,"meta":358,"style":358},"var fixture = new Fixture().Customize(new AutoNSubstituteCustomization\n{\n    Relay = new SubstituteRelay(new ExactTypeSpecification(typeof(IOrderRepository)))\n});\n",[360,1644,1645,1667,1671,1702],{"__ignoreMap":358},[363,1646,1647,1649,1651,1653,1655,1657,1659,1661,1663,1665],{"class":365,"line":366},[363,1648,478],{"class":477},[363,1650,482],{"class":481},[363,1652,485],{"class":381},[363,1654,488],{"class":477},[363,1656,492],{"class":491},[363,1658,495],{"class":381},[363,1660,499],{"class":498},[363,1662,502],{"class":381},[363,1664,488],{"class":477},[363,1666,1116],{"class":491},[363,1668,1669],{"class":365,"line":400},[363,1670,731],{"class":381},[363,1672,1673,1676,1678,1680,1683,1685,1687,1690,1692,1695,1697,1699],{"class":365,"line":422},[363,1674,1675],{"class":481},"    Relay",[363,1677,485],{"class":381},[363,1679,488],{"class":477},[363,1681,1682],{"class":491}," SubstituteRelay",[363,1684,502],{"class":381},[363,1686,488],{"class":477},[363,1688,1689],{"class":491}," ExactTypeSpecification",[363,1691,502],{"class":381},[363,1693,1694],{"class":477},"typeof",[363,1696,502],{"class":381},[363,1698,456],{"class":491},[363,1700,1701],{"class":381},")))\n",[363,1703,1704],{"class":365,"line":543},[363,1705,1147],{"class":381},[293,1707,1708,1709,1711],{},"That example would substitute only ",[360,1710,456],{}," requests that match the specification you supply; other abstractions follow the rest of the fixture pipeline.",[310,1713,1715],{"id":1714},"how-it-works","How it works",[315,1717,1718,1725,1732,1739,1746,1756],{},[318,1719,1720,1724],{},[306,1721,1722],{},[360,1723,703],{}," — registers NSubstitute substitute creation and a residue collector for abstractions",[318,1726,1727,1731],{},[306,1728,1729],{},[360,1730,696],{}," — force a substitute for an AutoData parameter\u002Fproperty\u002Ffield",[318,1733,1734,1738],{},[306,1735,1736],{},[360,1737,1038],{}," — auto-configure substitute members from the fixture (with known gaps — see above)",[318,1740,1741,1745],{},[306,1742,1743],{},[360,1744,1057],{}," — create delegates with NSubstitute instead of the AutoFixture kernel",[318,1747,1748,1752,1753,1755],{},[306,1749,1750],{},[360,1751,1080],{}," — residue collector (default ",[360,1754,1085],{},") for interface\u002Fabstract requests",[318,1757,1758,1763],{},[306,1759,1760],{},[360,1761,1762],{},"Freeze\u003CT>()"," — one shared substitute for setup and verification",[310,1765,1767],{"id":1766},"next-steps","Next steps",[315,1769,1770,1775,1779,1783,1788,1792],{},[318,1771,1772],{},[296,1773,1774],{"href":102},"Integrations overview",[318,1776,1777],{},[296,1778,114],{"href":115},[318,1780,1781],{},[296,1782,126],{"href":127},[318,1784,1785],{},[296,1786,1787],{"href":679},"Custom AutoData attribute",[318,1789,1790],{},[296,1791,78],{"href":79},[318,1793,1794],{},[296,1795,173],{"href":174},[310,1797,1799],{"id":1798},"api","API",[315,1801,1802,1808,1814,1820],{},[318,1803,1804],{},[296,1805,1807],{"href":1806},"\u002Fapi\u002Fautonsubstitute\u002F5-0-0-rc-1","AutoFixture.AutoNSubstitute package",[318,1809,1810],{},[296,1811,1812],{"href":1002},[360,1813,703],{},[318,1815,1816],{},[296,1817,1818],{"href":1630},[360,1819,1085],{},[318,1821,1822],{},[296,1823,1824],{"href":693},[360,1825,688],{},[1827,1828,1829],"style",{},"html pre.shiki code .s9Xrk, html code.shiki .s9Xrk{--shiki-light:#800000;--shiki-default:#800000;--shiki-dark:#808080}html pre.shiki code .swrg_, html code.shiki .swrg_{--shiki-light:#800000;--shiki-default:#800000;--shiki-dark:#569CD6}html pre.shiki code .ssBXb, html code.shiki .ssBXb{--shiki-light:#E50000;--shiki-default:#E50000;--shiki-dark:#9CDCFE}html pre.shiki code .s_Yst, html code.shiki .s_Yst{--shiki-light:#000000;--shiki-default:#000000;--shiki-dark:#D4D4D4}html pre.shiki code .swG-L, html code.shiki .swG-L{--shiki-light:#0000FF;--shiki-default:#0000FF;--shiki-dark:#CE9178}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 .stxUP, html code.shiki .stxUP{--shiki-light:#0000FF;--shiki-default:#0000FF;--shiki-dark:#569CD6}html pre.shiki code .sswaR, html code.shiki .sswaR{--shiki-light:#001080;--shiki-default:#001080;--shiki-dark:#9CDCFE}html pre.shiki code .sopvc, html code.shiki .sopvc{--shiki-light:#267F99;--shiki-default:#267F99;--shiki-dark:#4EC9B0}html pre.shiki code .swoLU, html code.shiki .swoLU{--shiki-light:#795E26;--shiki-default:#795E26;--shiki-dark:#DCDCAA}html pre.shiki code .s-S-M, html code.shiki .s-S-M{--shiki-light:#098658;--shiki-default:#098658;--shiki-dark:#B5CEA8}",{"title":358,"searchDepth":400,"depth":400,"links":1831},[1832,1833,1834,1835,1836,1837,1842,1843,1844],{"id":312,"depth":400,"text":313},{"id":330,"depth":400,"text":331},{"id":445,"depth":400,"text":446},{"id":464,"depth":400,"text":465},{"id":687,"depth":400,"text":688},{"id":996,"depth":400,"text":997,"children":1838},[1839,1840,1841],{"id":1151,"depth":422,"text":1038},{"id":1466,"depth":422,"text":1057},{"id":1618,"depth":422,"text":1080},{"id":1714,"depth":400,"text":1715},{"id":1766,"depth":400,"text":1767},{"id":1798,"depth":400,"text":1799},"NSubstitute integration — create substitutes automatically with AutoNSubstituteCustomization.","md",{},{"title":122,"description":1845},"U6grfgD3_xeWrPm1sWNfQPQ-JIQh0jBVhjsgpr5W88k",[1851,1852],{"title":118,"path":119,"stem":120,"children":-1},{"title":126,"path":127,"stem":128,"children":-1},1788856649832]