Start with what Valve actually documents, because it changes which fixture you need. In a Steamworks microtransaction integration the partner never receives a billing address at all: “The Steam overlay handles collecting all of the user's billing information.” The ISteamMicroTxn endpoints bear that out. InitTxn takes an order id, a Steam ID, an app id, item ids, quantities, amounts in cents, an ISO 4217 currency, an ISO 639-1 language, and — when the user authorises from the web rather than the Steam client — an IP address. Nothing resembling a street or a postal code appears anywhere in it. The entire geography model exposed to a partner is three values: country as an ISO 3166-1 alpha-2 code, a state field documented as “US State. Empty for non-US countries”, and a currency code, returned by GetUserInfo, QueryTxn and GetReport.
Valve publishes a developer sandbox for exactly this work — the same calls under ISteamMicroTxnSandbox rather than ISteamMicroTxn, where “the sandbox supports all requests available through the regular API but no actual funds will be withdrawn from the tester's Steam wallet.” There is no documented way to inject a test address or force an address-validation failure there, because there is no address field to fail. What you can vary is more useful anyway. Valve asks partners to run a fraud screen of their own: comparing the currency on a transaction against the country a request comes from gives you, in its words, “more information when looking for patterns in fraudulent activity”, with the caution that a mismatch on its own proves nothing, since people buy while travelling. Build it as a signal you log and assert on, not a gate you block on.
The fixtures Steam does reject are numeric. Amounts reach InitTxn in hundredths of the selected currency unit, and several currencies carry hard increment rules that a casually chosen test value will violate. Korean won “must be charged in increments of 1000 jeon (e.g. 2000, not 1599 or 1600)”. Vietnamese dong goes in increments of 50000 xu, Costa Rican colón in increments of 500 céntimos, and CLP, COP, IDR, INR, JPY, KZT, TWD, UAH and UYU in increments of 100. A suite that only ever exercises USD sees none of this. Build your fixture matrix over currency codes, amounts and the account status GetUserInfo returns — Active, Trusted, or locked from purchasing — rather than over addresses, and you are exercising the part of the integration that can genuinely turn a purchase down.
An address still appears around the integration, just not inside it — your own account or checkout form, your support tooling, the reporting you key on that state field, any record you keep of a customer's billing details. The hard part there is not the street name. A US address is not four independent fields: the five-digit ZIP is geographically structured, its first three digits identifying the USPS sectional centre facility that sorts the mail, and that facility's service area sits inside a single state in all but a handful of border cases. So a ZIP and the state beside it agree in all but a handful of border cases. Put 90210 next to New York and any lookup rejects the pair; five arbitrary digits fail more often than not, though roughly 41,000 of the 100,000 possible values are assigned, so about two in five are real codes that then disagree with the city beside them.
It is a lookup rather than a pattern match, which is why formatting alone never rescues a bad pair — USPS Publication 28 defines a complete address as one “that has all the address elements necessary to allow an exact match with the current Postal Service ZIP+4 and City State files”. Address Verification Service is a different check again, run by the card issuer rather than by you: in Stripe's words, “the card issuer performs an AVS check to verify that they match the billing address on file”. A generated address is on file nowhere, so drive AVS paths with the values your processor publishes — Stripe's 4000000000000028 fails the address line 1 check — and use generated data for the fields that only need to be well-formed and region-consistent.
How the generator helps with Steam integration testing: City, state and ZIP that genuinely agree — the pairing a real lookup validates, rather than four fields filled independently; Country code, US state and the country's ISO 4217 currency in one record, which are the geographic values a Steamworks partner actually receives; Randomised street name and house number, so the address is format-valid while resolving to no real occupant; Pin a specific state or city when your own reporting or state-keyed logic needs a known jurisdiction; Real NANPA area code for the pinned place, so the phone field does not contradict the address; Bulk export to CSV, JSON or SQL, so a whole fixture set can be committed to your repository instead of typed in by hand.