Since you can't change the datastructure, consider using advanced text editor tools to write those lines for you. It is not the most orthodox way to deal with it, but it works and it's at least fast and clear. In emacs, I would consider two options:
1: write a loop that generates the formatted string for you:
(defun copy_iter (strng times)
(let ((result))
(dotimes (i times result)
(setq result (concat result "\n" (format strng i))))))
And calling (copy_iter "CU_ASSERT_EQUAL(55, my_tab_%s[5]);" 200)
will return what you expect
2: copy a generic string 200 times and then replace a marker using regular expressions:
1) copy the string with a generic marker 200 times (here is how):
"
CU_ASSERT_EQUAL(55, my_tab_<CHANGE_THIS>[5]);
CU_ASSERT_EQUAL(55, my_tab_<CHANGE_THIS>[5]);
CU_ASSERT_EQUAL(55, my_tab_<CHANGE_THIS>[5]);
CU_ASSERT_EQUAL(55, my_tab_<CHANGE_THIS>[5]);
CU_ASSERT_EQUAL(55, my_tab_<CHANGE_THIS>[5]);
...
2) call replace-regexp, with input: <CHANGE_THIS>
and output: \#
will also left the expected string, as explained here.
Of course, emacs is just a suggestion. The main point of my answer is to show that sometimes (or rather many times) the text editor itself can help us overcome such problems. I hope it helps!
Cheers