---
updatedAt: 2025-05-05T20:57:23.000Z
agentTools:
  projectIndex: https://dossier.teststack.net/llms.txt
---

# Creating proxy objects

This library integrates with [NSubstitute](http://nsubstitute.github.io/) for generating proxy objects, this means you can call the `AsProxy` method on your builder to request that the result from calling `Build` will be an NSubstitute proxy with the public properties set to return the values you have specified via your builder, e.g.

```csharp
var customer = CustomerBuilder.WithFirstName("Rob").AsProxy().Build();
customer.CustomerForHowManyYears(Arg.Any<DateTime>()).Returns(10);
var name = customer.FirstName; // "Rob"
var years = customer.CustomerForHowManyYears(DateTime.Now); // 10
```

If you need to alter the proxy before calling `Build` to add complex behaviours that can't be expressed by the default public properties returns values then you can override the `AlterProxy` method in your builder, e.g.

```csharp
class CustomerBuilder : TestDataBuilder<Customer, CustomerBuilder>
{
	// ...
	
	private int _years;
	
	public CustomerBuilder HasBeenMemberForYears(int years)
	{
		_years = years;
		return this;
	}
	
	protected override void AlterProxy(Customer proxy)
	{
		proxy.CustomerForHowManyYears(Arg.Any<DateTime>()).Returns(_years);
	}
	
	// ...
}
```

Then in your test you can use:

```csharp
var customer = new CustomerBuilder()
	.AsProxy()
	.HasBeenMemberForYears(10);
var years = customer.CustomerForHowManyYears(DateTime.Now); // 10
```

*Remember that when using proxy objects of real classes that you need to mark properties and methods as virtual and have a protected empty constructor.*