Testing and has_many Questions

To unit test the models' functionality, I realized I need to call
save. That said, I wondered if save in test causes the model to be
stored in the database. If so, what should I do to avoid this
problem? Should I just call Model.destroy_all at the end?

Second, to test controllers' functionality, is it possible to set the
params and session hash? If not, how do you test controller
functionality?

Also, many of my models uses has_many and belongs_to. What's the
difference between the following methods: count, size, length.