You sometimes want to test business logic, possibly outside of Rails, where you don’t want to bother with fixtures and or connecting to a database. Structs offer a simple solution when you only want to access and modify data in records and associations and aren’t interested in testing finding or saving the data.
Obviously this is of no use when you hneed to use methods in the classes you’d want to mock with Structs.
Customer = Struct.new(:name, :address, :zip) Order = Struct.new(:customer,:item, :created_at) joe = Customer.new("Joe Smith", "1234 Franklin",55455) jane = Customer.new jane.name = "jane Smith" jane.address = "1234 Franklin" jane.zip = 55455 orders =  orders << Order.new(joe, "20 2x4","10-10-2008") orders << Order.new(joe, "hammer","10-11-2008") orders << Order.new(jane,"nails","10-12-2008) # Store is an Active Record class # It won't know 'orders' isn't a collection #of ActiveRecord::Base::Order class instances store = Store.new store.orders = orders store.orders << Order.new(joe, "paint", "10-13-2008") assert_equal 1, store.orders_from_unique_addresses assert_equal 2,store.orders_from_unique_customers assert_equal 4,store.items_ordered
Having established that the structs function in a trivial way like Active Record objects, you can then use them in the part of your tests requiring this data.