# RepeatableToolContract

> Tracon documentation. Tracon is a .NET package family that adds a control
> plane on Microsoft Agent Framework, published as NuGet packages that run
> inside your own ASP.NET Core application.
>
> Page: https://tracon.dev/api/tracon.testing.contracts.tools.repeatabletoolcontract/
> Summary: RepeatableToolContract: Behavior tests for a custom tool that can safely be repeated.

<div class="api-provenance">Namespace Tracon.Testing.Contracts.Tools · Assembly <code>Tracon.Testing.Contracts.Xunit.dll</code></div>

Behavior tests for a custom tool that can safely be repeated.

```csharp
public abstract class RepeatableToolContract : CustomToolContract, IAsyncLifetime, IAsyncDisposable
```

<dl class="api-relations"><dt>Inheritance</dt><dd><a href="https://learn.microsoft.com/dotnet/api/system.object">object</a> ← <a href="/api/tracon.testing.contracts.tools.customtoolcontract/">CustomToolContract</a> ← <a href="/api/tracon.testing.contracts.tools.repeatabletoolcontract/">RepeatableToolContract</a></dd><dt>Implements</dt><dd>IAsyncLifetime, <a href="https://learn.microsoft.com/dotnet/api/system.iasyncdisposable">IAsyncDisposable</a></dd><dt>Inherited Members</dt><dd><a href="/api/tracon.testing.contracts.tools.customtoolcontract/#Tracon_Testing_Contracts_Tools_CustomToolContract_CreateRegistrationAsync">CustomToolContract.CreateRegistrationAsync()</a>, <a href="/api/tracon.testing.contracts.tools.customtoolcontract/#Tracon_Testing_Contracts_Tools_CustomToolContract_InitializeAsync">CustomToolContract.InitializeAsync()</a>, <a href="/api/tracon.testing.contracts.tools.customtoolcontract/#Tracon_Testing_Contracts_Tools_CustomToolContract_DisposeAsync">CustomToolContract.DisposeAsync()</a>, <a href="/api/tracon.testing.contracts.tools.customtoolcontract/#Tracon_Testing_Contracts_Tools_CustomToolContract_Name_is_stable_and_valid">CustomToolContract.Name_is_stable_and_valid()</a>, <a href="/api/tracon.testing.contracts.tools.customtoolcontract/#Tracon_Testing_Contracts_Tools_CustomToolContract_Concurrent_server_calls_complete">CustomToolContract.Concurrent_server_calls_complete()</a>, <a href="/api/tracon.testing.contracts.tools.customtoolcontract/#Tracon_Testing_Contracts_Tools_CustomToolContract_Metadata_is_self_consistent">CustomToolContract.Metadata_is_self_consistent()</a>, <a href="/api/tracon.testing.contracts.tools.customtoolcontract/#Tracon_Testing_Contracts_Tools_CustomToolContract_Registration">CustomToolContract.Registration</a>, <a href="/api/tracon.testing.contracts.tools.customtoolcontract/#Tracon_Testing_Contracts_Tools_CustomToolContract_ExpectedResultText">CustomToolContract.ExpectedResultText</a>, <a href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>, <a href="https://learn.microsoft.com/dotnet/api/system.object.memberwiseclone">object.MemberwiseClone()</a>, <a href="https://learn.microsoft.com/dotnet/api/system.object.tostring">object.ToString()</a>, <a href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)">object.Equals(object?)</a>, <a href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object?, object?)</a>, <a href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object?, object?)</a>, <a href="https://learn.microsoft.com/dotnet/api/system.object.gethashcode">object.GetHashCode()</a></dd></dl>

## Remarks

Derive from this contract only when the tool declares
[TraconToolRegistration.SafeToRepeat](/api/tracon.tracontoolregistration/#Tracon_TraconToolRegistration_SafeToRepeat). The base
[CustomToolContract](/api/tracon.testing.contracts.tools.customtoolcontract/) remains the contract for tools that do
not make that idempotency promise.

## Constructors

### <a id="Tracon_Testing_Contracts_Tools_RepeatableToolContract__ctor"></a> RepeatableToolContract\(\)

```csharp
protected RepeatableToolContract()
```

## Methods

### <a id="Tracon_Testing_Contracts_Tools_RepeatableToolContract_Registration_is_marked_safe_to_repeat"></a> Registration\_is\_marked\_safe\_to\_repeat\(\)

Verifies that the registration makes the repeatability promise.

```csharp
[Fact]
public void Registration_is_marked_safe_to_repeat()
```
