When reading from your test bench, you need to assign a high impedance value to RAM_DATA_IN_OUT: RAM_DATA_IN_OUT <= (others => 'Z');
In your code currently both the test bench and the RAM try to send an output on the same signal. As long as it's 0 there won't be a problem, but if the RAM tries to assign a 1 to a signal and the test bench tries to assign a 0 to it, then there is a conflict and the resolved signal becomes 'X'.
As a side note you should avoid using ieee.std_logic_unsigned. It is non standard but unfortunately there are still a lot of examples and books that use it. It makes it also impossible to use signed signals in the same code. You should use ieee.numeric_std instead and the standard signed and unsigned types.